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

Nan*_*iao 2 linux bash shell env docker

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

bash-4.1# /usr/bin/env bash -x
bash-4.1# exit
+ exit
exit
Run Code Online (Sandbox Code Playgroud)

但是把这个命令写成脚本执行后却不起作用,提示“ 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
Run Code Online (Sandbox Code Playgroud)

两种方法有什么区别吗?

Tho*_*key 5

简而言之,您只能获得一个参数给解释器,该参数是通过“#!”指定的。机制。这变成了“bash -x”。

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

#!/bin/bash -x -i
Run Code Online (Sandbox Code Playgroud)

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

Sven Mascheck 在他的主题页面中对此发表了评论:

大多数系统将所有参数作为单个字符串传递