【发布时间】:2014-03-23 22:08:26
【问题描述】:
我有一个 bash 脚本正在执行另一个 bash 脚本:
例如:
脚本名称“rotator”正在调用脚本名称“s3-get”,如下所示
!# /bin/bash
...
./s3-get {and params here}
“cat”、“basename”等所有命令在此处正确运行
在“s3-get”脚本中有如下代码:
!# /bin/bash
cat > /dev/null << EndOfLicense
...
readonly weAreKnownAs="$(basename $0)"
...
main "$@"
所以,如果我直接从 shell 执行 s3-get 脚本,它就可以完美运行。当我尝试从“rotator”脚本执行它时,我收到错误“cat: command not found”。我可以通过将“cat”更改为“/bin/cat”来解决这个问题,只是我认为这是不正确的,因为如上所述,脚本在独立执行时可以正确运行。如果我如上所述修复“cat”命令,引发的下一个错误是“basename: command not found”,然后是“main: command not found”
我对 shell 编程还很陌生,因此感谢任何帮助。
谢谢
【问题讨论】:
-
听起来你的一个shell脚本正在修改
PATH变量,当你没有给它一个像/bin/cat这样的完全限定的命令名称时,它就是shell查找命令的方式。跨度> -
我希望这两个脚本都以 "#!/bin/bash" 而不是 "!# /bin/bash" 开头,即先是哈希,然后是 bang,没有空格。
-
您可以随时在脚本中的任何位置添加“echo $PATH”以查看 PATH 设置的内容。您还可以在终端中键入该命令,查看通常在任何脚本之外设置的路径,然后在脚本中将其设置为与第二行相同。
-
@mklement0 也许,但不寻常,无论如何“!#”肯定是错误的。
-
@MarkSetchell 好的点是 OP 把 shebang 弄错了(
!#而不是正确的#!),但是#!后面的空格是可以的,虽然不寻常 - “相反,后面的空格传统上允许使用 shebang”(en.wikipedia.org/wiki/Shebang_(Unix))