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

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

sh: 1: source: not found

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


当前回答

$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上,我没有使用sh scriptname.sh来运行文件,而是使用。Scriptname.sh,它工作了! 我的文件的第一行包含: # !/bin/bash

使用该命令运行脚本

.name_of_script.sh

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

试一试:

source ./<filename>

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

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

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

#!/bin/bash

如果你不能把脚本改成“。”而不是“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

source是bash内置命令,因此要执行source命令,您可以以Root用户登录。

sudo - s 源。/ filename.sh