Debian12的#!bash #!/bin/bash #!/bin/env bash #!/usr/bin/bash #!/usr/bin/env bash

bash脚本开头可写成 #!/bin/bash , #!/bin/env bash , #!/usr/bin/bash , #!/usr/bin/env bash

  • #!/bin/bash , #!/usr/bin/bash
  • #!/bin/env bash , #!/usr/bin/env bash

Debian12的 /bin/usr/bin 的软链接, /sbin/usr/sbin 的软链接, (Debian12默认没有ll命令,用的ls -l

bash 复制代码
root@88:~# ls -l /bin
lrwxrwxrwx 1 root root 7 Nov  1  2023 /bin -> usr/bin
root@88:~# ls -l /sbin
lrwxrwxrwx 1 root root 8 Nov  1  2023 /sbin -> usr/sbin

所以

  • #!/bin/bash#!/usr/bin/bash 是等价的,
  • #!/bin/env bash#!/usr/bin/env bash 是等价的

那么 #!/bin/bash#!/bin/env bash 有什么不同呢?

#!/bin/bash 是直接调用 bash 命令

#!/bin/env bash 是调用 env 命令, 且 bash 作为参数, 从而调用 bash

执行以下命令的效果一样, 都相当于执行了 bash 命令, 新开子bash

bash 复制代码
bash
/bin/bash
/usr/bin/bash
/bin/env bash
/usr/bin/env bash
  • 使用 env 调用 bash 提供了灵活性, 可以变化bash的位置或多版本,只要写到环境变量PATH就行。但也降低了安全性,比如将恶意的命名为bash的程序放入环境变量PATH并靠前 .

  • 直接调用 bash 则更加安全?(好像也牵强)

另外, 既然可以写成 #!/usr/bin/env bash 这样执行命令的形式,

那也可以写成 #!bash 这样的形式

可以写成这样

相关推荐
7哥♡ۣۖᝰꫛꫀꪝۣℋ几秒前
Spring IoC&DI
java·开发语言·mysql
wadesir4 分钟前
Go语言反射之结构体的深比较(详解reflect.DeepEqual在结构体比较中的应用)
开发语言·后端·golang
你不是我我19 分钟前
【Java 开发日记】我们来说一说 Redis IO 多路复用模型
java·开发语言·redis
想七想八不如1140820 分钟前
408操作系统 PV专题
开发语言·算法
浩瀚地学22 分钟前
【Java】ArrayList
java·开发语言·经验分享·笔记
阿杰同学30 分钟前
Java 设计模式 面试题及答案整理,最新面试题
java·开发语言·设计模式
这样の我30 分钟前
java 模拟chrome指纹 处理tls extension顺序
java·开发语言·chrome
yong999032 分钟前
基于MATLAB的雷达压制干扰仿真
开发语言·matlab
杨云龙UP36 分钟前
从0到可落地:Oracle RMAN异地NFS备份标准脚本(多实例通用)
linux·运维·数据库·oracle