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
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
/bin/bash
/usr/bin/bash
/bin/env bash
/usr/bin/env bash
-
使用
env
调用bash
提供了灵活性, 可以变化bash
的位置或多版本,只要写到环境变量PATH就行。但也降低了安全性,比如将恶意的命名为bash的程序放入环境变量PATH并靠前 . -
直接调用
bash
则更加安全?(好像也牵强)
另外, 既然可以写成 #!/usr/bin/env bash
这样执行命令的形式,
那也可以写成 #!bash
这样的形式
可以写成这样