bash 脚本错误:来源:未找到

Mou*_*inX 8 bash shell-script

我一定缺少对在 bash 中获取文件的基本理解。我尝试了看起来应该可行的不同方法,但我仍然收到此错误source: not found

在我的脚本中,我尝试 cd 到我想要获取的文件所在的目录,然后再获取它。那没有用。

cd /home/user/path/to/
source myfile
Run Code Online (Sandbox Code Playgroud)

也没有提供要获取的文件的完整绝对路径:

source /home/user/path/to/myfile
Run Code Online (Sandbox Code Playgroud)

错误是“source: not found”,上面语句的行号。

还有什么其他的,一些基本的,我可以忽略的吗?我检查了我正在使用的路径,我没有看到任何错误。这个问题是可重复的。

我在 Linode 服务器上运行 Ubuntu,我的脚本都以:

#!/bin/bash
Run Code Online (Sandbox Code Playgroud)

Gra*_*eme 16

您使用绝对路径的第二次尝试应该是正确的方法。

您的错误的可能原因:

  1. 该文件不存在。
  2. 该文件存在,但由于某种原因您无法读取它(例如权限或某些文件系统错误。
  3. 你有一个alias覆盖内置的source(用 修复unalias source
  4. 你有一个覆盖的函数source(用 修复unset -f source
  5. 您不知何故没有使用bash(尽管您的爆炸线会建议您使用)。source不是 POSIX。使用sourceondash不起作用,只能.起作用。
  6. 我与测试sourcebash在POSIX模式下工作,但也许这是由于我的版本或编译标志。也许这对您来说是不同的,并且您处于 POSIX 模式。

1 和 5 给出的错误类似于您发布的错误。

  • 是的!谢谢你。我相信我的脚本在服务器上运行时会被这样调用:`sh myscript` 所以即使我的脚本以 `#!/bin/bash` 开头,这在某种程度上还不够。那么......在这种情况下我如何获取文件?谢谢 (2认同)
  • 您必须使用`bash` 来运行脚本或设置可执行权限并直接执行。 (2认同)

Per*_*ulf 8

您可能正在使用运行 bash 以外的 shell 的用户登录。假设您使用用户 X 登录并且 X 运行sh或另一个 shell,而不是 bash,并且您使用用户 X 运行source myscript.sh,那么您应该得到给定的错误。

  • @Gilles - 有效。我用了`.`。我不知道这是“标准”名称,并且“source”只是它的同义词。 (2认同)

小智 6

从 rpm.spec 文件运行内容时,我遇到了类似的问题。

我通过提供脚本的显式路径解决了该问题。

所以,而不是

source myfile
Run Code Online (Sandbox Code Playgroud)

我不得不跑

source ./myfile
Run Code Online (Sandbox Code Playgroud)

我不确定确切的原因是什么,但看起来 myfile 是在 $PATH 和 $CWD 中搜索的。我想这取决于 shell 中的某些配置。