运行脚本时出现错误消息“源:未找到”

运行脚本时出现错误消息“源:未找到”

我正在创建一个小型自动设置脚本,如果某些路径未导出/etc/profile,它将进行修改$HOME/.profile。然后,我想自动重新加载这些路径。

我读过这样的source方法,所以我启动了终端并输入:

source /etc/profile
source ~/.profile

从终端来看,它没有输出任何错误。

但是,将这两个命令放入 Bash 脚本中会导致source: not found

  1. 我如何确定脚本由 Bash 执行,即使#!/bin/sh指定了(显然,它不能保证这一点)?
  2. 为什么会说这两个来源无法被找到,尽管它们显然是存在的呢?

答案1

/bin/sh不是bash。要使用 执行脚本bash,请#!/bin/bash在脚本的第一行中写入。

错误source: not found没有被删除,因为/etc/profile没有找到。它被删除了,因为source没有找到。source是一个 Bash 内置函数,并且您没有使用 执行脚本bash。所以很明显为什么没有找到它。更改#!脚本中的行,它就会起作用。

答案2

有些 shell 支持.而不是source。因此你可以尝试类似这样的操作

. filename

代替

source filename

希望它有效

答案3

1. 我如何确定脚本由 Bash 执行,即使 #!/bin/sh指定了(显然,它不能保证这一点)?

为了确保为shshell 编写的脚本(如您的情况 - 请参阅#!/bin/sh 和 #!/bin/bash 有什么区别?)通过Bash执行,只需运行以下命令:

bash script_name

因此,您将不会再收到该错误。

2. 这两个源头显然是存在的,为什么却说找不到呢?

它并没有说那些源文件不存在。它说source找不到命令。这是正常的,因为既然你用#!/bin/shline 开始你的脚本,你的脚本将使用 运行sh,而不是bash你想象的那样。为什么这是正常的?因为source命令是 Bash 内置的,但不是sh内置的。要以 为源文件sh,你应该使用.(点)。示例:

. /etc/profile
. ~/.profile

另一种方法是将 shebang 行更改#!/bin/bash混乱他的回答

答案4

看到这个那么问题来了

/bin/sh通常是其他试图模仿 Shell 的 shell。许多发行版使用/bin/bashsh它支持源。但在 Ubuntu 上,/bin/dash使用的是 ,它不支持源。如果您无法编辑脚本,请尝试更改运行它的 shell。

相关内容