在sh shell中找不到源命令

我有一个使用sh shell的linux脚本。 我在使用“source”命令的行中出现错误。 基本上看来,“源”并不包括在我的SH shell中。 如果我inputsh并input源码,我会得到:

sh: 1: source: not found 

我应该明确安装“源”吗? 我有一个sh shell的错误版本吗?

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

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

 . filename 
 $ls -l `which sh` /bin/sh -> dash $sudo dpkg-reconfigure dash #Select "no" when you're asked [...] $ls -l `which sh` /bin/sh -> bash 

那就可以了

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

 #!/bin/bash 

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

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

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

 #!/bin/bash 

source builtin是一个bashism。 写这简单的. 代替。

例如

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

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

Bourne shell(sh)使用PATH来定位source <file> 。 如果您正在尝试获取的文件不在path中,则会显示错误“未find文件”。

尝试:

 source ./<filename> 

我在Ubuntu上find一个gnu Makefile,(其中/ bin / sh – > bash)

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

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

我的SHELL环境variables也被设置为/ bin / bash

 test: $(shell . ./my_script) 

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

source是bash内置的命令,所以要执行source命令,可以以Root身份login。

sudo -s source ./filename.sh

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