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

我正在玩一个docker CentOS镜像,在terminal里find执行“ /usr/bin/env bash -x ”的命令是OK的:

 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在关于这个话题的页面上对此进行了评论:

大多数系统将所有参数作为单个string传递

shebang行最多只有一个参数。
当你提出更多的论据时,他们不会被分裂。 你可以比较这个命令行命令

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