【问题标题】:Why does "/usr/bin/env bash -x" only work in command line?为什么“/usr/bin/env bash -x”只能在命令行中使用?
【发布时间】:2015-08-01 08:58:01
【问题描述】:

我正在玩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

这两种方法有什么区别吗?

【问题讨论】:

  • 不,没有区别,确保文件内容是你认为的(检查od -c,我怀疑你有一些有趣的字符而不是空格)并且 bash 是在路径中。
  • set -x 作为脚本的第一行可以避免在hashbang 中传递参数。

标签: linux bash shell docker env


【解决方案1】:

简短的回答是你只能得到一个通过“#!”指定的参数给解释器。机制。那变成了“bash -x”。

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

#!/bin/bash -x -i

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

Sven Mascheck 在his page 上讨论了这个话题:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • Sheebangs 在某些操作系统中仅支持一个参数(请参阅this answer)。在 linux 中,这会产生 /usr/bin/env: ‘"bash -x"’: No such file or directory。在这种情况下,一种替代方法是在 sheebang 下方使用set -x
    猜你喜欢
    • 2014-03-03
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多