我有一个脚本,使用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版本是否错误?
当前回答
你有两个选择,从纯shell切换到bash,启用bash功能,包括source。 https://superuser.com/questions/1220159/bash-prompt-variables-not-working/1764353#1764353
或者使用。而不是用这种形式的源
. ~ / .your_file_name
例如
我们走吧。~ / . bashrc
请考虑在多特和蒂尔达之间留个位置。Tilda指的是主目录,如果你的文件位于主目录上方的某个位置,请使用/中的绝对地址
其他回答
发生此问题是因为jenkins Execute Shell通过其/bin/sh运行脚本
因此,/bin/sh不知道“源”
您只需要在jenkins中Execute Shell的顶部添加下面的行
#!/bin/bash
在Bourne shell(sh)中,使用。命令获取文件的源
. filename
在某些操作系统/环境(Mac OS, Travis-CI, Ubuntu,至少),这必须是:
. ./filename
(以下是Adrien Joly的评论)
source命令内置于某些shell中。如果你有一个脚本,它应该在第一行指定使用什么shell,例如:
#!/bin/bash
$ls -l `which sh`
/bin/sh -> dash
$sudo dpkg-reconfigure dash #Select "no" when you're asked
[...]
$ls -l `which sh`
/bin/sh -> bash
那就好了
我在Ubuntu上的gnu Makefile中找到了(其中/bin/sh -> bash)
我需要用。命令,并使用./前缀指定目标脚本(参见下面的示例)
源没有工作在这种情况下,不确定为什么,因为它应该调用/bin/ bash_. .
我的SHELL环境变量也设置为/bin/bash
test:
$(shell . ./my_script)
注意,这个示例不包括制表符;必须格式化堆栈交换。