在sh shell中找不到source命令

时间:2012-12-04 12:01:43

标签: bash shell sh

我有一个使用sh shell的脚本。我在使用source命令的行中出错。我的source shell中似乎没有sh

如果我明确尝试从shell运行source,我会得到:

sh: 1: source: not found

我应该以某种方式安装“来源”吗?我的sh版本有错吗?

12 个答案:

答案 0 :(得分:97)

在Bourne shell(sh)中,使用。命令来源文件

. filename

答案 1 :(得分:92)

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

答案 2 :(得分:42)

$ls -l `which sh`
/bin/sh -> dash

$sudo dpkg-reconfigure dash #Select "no" when you're asked
[...]

$ls -l `which sh`
/bin/sh -> bash

然后就可以了

答案 3 :(得分:18)

内置source是一种基础。请将其简写为.

<强> e.g。

. $FILE

# OR you may need to use a relative path (such as in an `npm` script):

. ./$FILE
  

https://wiki.ubuntu.com/DashAsBinSh#source

答案 4 :(得分:7)

source命令内置于一些shell中。如果您有脚本,则应指定在第一行使用的shell,例如:

#!/bin/bash

答案 5 :(得分:7)

发生此问题是因为jenkins Execute Shell通过其/ bin / sh

运行脚本

因此,/ bin / sh不知道&#34; source&#34;

您只需在jenkins

中的Execute Shell顶部添加以下行
#!/bin/bash

答案 6 :(得分:1)

source 是一个bash内置命令,因此要执行source命令,您可以以Root身份登录。

sudo -s source ./filename.sh

答案 7 :(得分:0)

我在Ubuntu上找到了一个gnu Makefile,(其中/ bin / sh - &gt; bash)

我需要使用。命令,以及使用./前缀指定目标脚本(参见下面的示例)

源代码在这个实例中不起作用,不知道为什么因为它应该调用/ bin / bash ..

我的SHELL环境变量也设置为/ bin / bash

test:
    $(shell . ./my_script)

请注意,此示例不包含制表符;不得不格式化堆栈交换。

答案 8 :(得分:0)

当我尝试从#Jenkins execute shell调用 source 命令时遇到了此错误。

source profile.txt           要么   source profile.properties

要使用的替换

. ./profile.txt        要么 . ./profile.properties

注意:两个点(。)之间有一个空格

答案 9 :(得分:-1)

Bourne shell(sh)使用PATH在source <file>中找到。如果您尝试提供的文件不在您的路径中,则会收到错误文件&#39;。

尝试:

source ./<filename>

答案 10 :(得分:-1)

在Ubuntu上,我使用而不是使用sh scriptname.sh来运行文件。 scriptname.sh,它起作用了! 我文件的第一行包含: .name_of_script.sh

使用此命令运行脚本

"."

答案 11 :(得分:-2)

这可能对您有所帮助,我收到此错误是因为我尝试使用命令.profile重新加载. .profile并且语法错误