为什么“/usr/bin/env bash -x”只能在命令行中工作?

Why does "/usr/bin/env bash -x" only work in command line?

我正在玩 docker CentOS 图像,发现在终端中执行“/usr/bin/env bash -x”命令没问题:

bash-4.1# /usr/bin/env bash -x
bash-4.1# exit
+ exit
exit

但是把这个命令写成脚本执行后,还是不行,提示“No such file or directory”:

bash-4.1# ls -lt a.sh
-rwxr-xr-x. 1 root root 23 May 20 04:27 a.sh
bash-4.1# cat a.sh
#!/usr/bin/env bash -x
bash-4.1# ./a.sh
/usr/bin/env: bash -x: No such file or directory

两种方法有什么区别吗?

简短的回答是,您只能向解释器获取一个参数,该参数是通过“#!”指定的。机制。那变成了"bash -x".

通常限制更明显,例如,使用

#!/bin/bash -x -i

将“-x -i”作为参数传递,并得到意想不到的结果。

Sven Mascheck 在 his page 中对此主题发表评论:

most systems deliver all arguments as a single string

shebang 行最多应有一个参数。
当您提供更多参数时,它们将不会被拆分。您可以将其与命令行命令进行比较

bash-4.1# /usr/bin/env "bash -x"