【问题标题】:command not found when executing nested bash scripts执行嵌套 bash 脚本时找不到命令
【发布时间】: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))

标签: linux bash shell ubuntu


【解决方案1】:

在命令行中尝试$ echo 'export PATH=$PATH:/root/scripts/RotateVideos' &gt;&gt; ~/.bashrc &amp;&amp; source ~/.bashrc,然后在脚本中使用s3-get 调用它。或者使用cd /root/scripts/RotateVideos &amp;&amp; bash s3-get

【讨论】:

    猜你喜欢
    • 2013-10-18
    • 2017-01-04
    • 2016-09-27
    • 2017-02-02
    • 2016-08-26
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    相关资源
    最近更新 更多