shell脚本中的“source”命令不起作用

时间:2018-02-14 10:50:24

标签: bash shell command-line-interface sh

我有一个文件来源于Centos 7。 如果我这样做,它就可以正常工作:

$ source set_puregev_env

但是,如果我把它放在shell脚本中,它就不起作用..

$ sh xRUN 
xRUN: line 3: source: set_puregev_env: file not found

这是我的shell脚本:xRUN

#!/bin/bash

source set_puregev_env

任何人都可以告诉我,我可能做错了什么,或者错过了什么?

1 个答案:

答案 0 :(得分:4)

source是一个用bash实现的命令,但不是sh。 有多种方法可以修复您的脚本。选择其中之一。

使用bash解释程序运行脚本

当您调用xRUN脚本时 - 您明确告诉它由sh解释

$ sh xRUN 

使用bash更改和解释脚本而不是

$ bash xRUN 

这将使bash解释源命令,并且您的脚本将起作用。

使用dot命令使脚本bourne兼容

您也可以使用dot命令更改源代码,该命令执行相同的操作但在bourne和bash中都受支持。

更改行:

source set_puregev_env

使用:

. set_puregev_env 

现在该脚本可以使用sh或bash。

使脚本可执行

您还应该直接运行脚本以避免这样的混淆,使其可执行chmod +x xRUN,并像这样调用它:

$ ./xRUN

然后它将使用shebang中指定的命令并使用脚本的其余部分作为输入。在你的情况下,它将使用bash - 因为这是在shebang中指定的。