在sh shell中找不到源命令

我有一个脚本,使用sh shell。我在使用source命令的行中得到一个错误。source似乎没有包含在我的sh shell中。

如果我显式地尝试从shell运行source,我得到:

sh: 1: source: not found

我是否应该安装“source”?我是否有一个错误的sh版本?

390800 次浏览

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

. filename

在某些操作系统/环境(Mac OS, Travis-CI, Ubuntu,至少),这必须是:

. ./filename

(Credit to Adrien Joly的评论如下)

source命令内置在一些shell中。如果你有一个脚本,它应该在第一行指定使用什么shell,例如:

#!/bin/bash

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

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


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


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

那就好了

Bourne shell (sh)使用PATH定位到source <file>。如果你试图获取的文件不在你的路径中,你会得到错误“文件未找到”。

试一试:

source ./<filename>

我在Ubuntu上的gnu Makefile中找到了(其中/bin/sh -> bash)

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

源没有工作在这种情况下,不确定为什么,因为它应该调用/bin/ bash_. .

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

test:
$(shell . ./my_script)

注意,这个示例不包括制表符;必须格式化堆栈交换。

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

因此,/bin/sh不知道“源”

您只需要在jenkins中Execute Shell的顶部添加下面的行

#!/bin/bash

这可能会帮助你,我得到这个错误,因为我试图用命令. .profile重新加载我的.profile,它有一个语法错误

source内置是一个bashism。将其简单地写成.

如。

. $FILE


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


. ./$FILE

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

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

< p > <代码> sudo - s 源。/ filename.sh < /代码> < / p >

当我试图从#Jenkins执行shell调用命令时,我遇到了这个错误。

< p > source profile.txtsource profile.properties < / p >

命令的替换是使用,

< p > . ./profile.txt. ./profile.properties < / p >

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

在Ubuntu上,我没有使用sh scriptname.sh来运行文件,而是使用。Scriptname.sh,它工作了! 我的文件的第一行包含: #!/bin/bash < / p >

使用该命令运行脚本

.name_of_script.sh