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


35

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

我已经阅读过source此内容,因此我启动了终端并输入:

source /etc/profile
source ~/.profile

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

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

  1. 即使#!/bin/sh指定了脚本,我如何才能确保该脚本由Bash执行(显然,它不能保证)?
  2. 为什么会说这两个来源毫无疑问地找不到呢?

Answers:


54

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

错误source: not found未删除,因为/etc/profile未找到。它被删除,因为source找不到。source是Bash的内置函数,您无需使用执行脚本bash。因此很清楚为什么找不到它。更改#!脚本中的行,它将起作用。


9

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

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

bash script_name

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

2.为什么会说当这两个来源毫无疑问地找不到时呢?

它并不表示这些源文件不存在。它说source找不到命令。这是正常现象,因为由于您是使用#!/bin/shline 开头的脚本,因此脚本将使用sh而不是bash您想象的那样运行。为什么正常?因为sourcecommand是Bash内置的,而不是sh内置的。要在中获取文件sh,应使用.(点)。例:

. /etc/profile
. ~/.profile

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


4

看到这样的问题

/bin/sh通常是其他一些试图模仿Shell的Shell。许多发行版都/bin/bash用于sh,它支持源代码。但是,在Ubuntu /bin/dash上使用了不支持源代码的文件。如果无法编辑脚本,请尝试更改运行该脚本的外壳。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.