为什么“/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"
我正在玩 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"