在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
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
,它有一个语法错误