我有一个脚本,使用sh shell。我在使用source命令的行中得到一个错误。它似乎源不包括在我的sh shell。
如果我显式地尝试从shell运行source,我得到:
sh: 1: source: not found
我是否应该安装“source”?我的sh版本是否错误?
我有一个脚本,使用sh shell。我在使用source命令的行中得到一个错误。它似乎源不包括在我的sh shell。
如果我显式地尝试从shell运行source,我得到:
sh: 1: source: not found
我是否应该安装“source”?我的sh版本是否错误?
当前回答
如果你不能把脚本改成“。”而不是“source”,把“sh”的链接改成“bash”而不是“dash”:
# which sh
/usr/bin/sh
# which bash
/usr/bin/bash
# ls -la /usr/bin/sh
lrwxrwxrwx 1 root root 4 Oct 5 15:55 /usr/bin/sh -> dash
# ls -sf /usr/bin/bash /usr/bin/sh
# ls -la /usr/bin/sh
lrwxrwxrwx 1 root root 4 Feb 6 09:18 /usr/bin/sh -> bash
其他回答
在Bourne shell(sh)中,使用。命令获取文件的源
. filename
在某些操作系统/环境(Mac OS, Travis-CI, Ubuntu,至少),这必须是:
. ./filename
(以下是Adrien Joly的评论)
source命令内置于某些shell中。如果你有一个脚本,它应该在第一行指定使用什么shell,例如:
#!/bin/bash
/bin/sh通常是试图模仿shell的其他shell。许多发行版使用/bin/bash作为sh,它支持source。但是在Ubuntu上,使用的是不支持source的/bin/dash。大多数shell使用。而不是来源。如果无法编辑脚本,请尝试更改运行脚本的shell。
发生此问题是因为jenkins Execute Shell通过其/bin/sh运行脚本
因此,/bin/sh不知道“源”
您只需要在jenkins中Execute Shell的顶部添加下面的行
#!/bin/bash
Bourne shell (sh)使用PATH定位源<文件>。如果你试图获取的文件不在你的路径中,你会得到错误“文件未找到”。
试一试:
source ./<filename>