bash - "source"shell 脚本中的命令不起作用

标签 bash shell command-line-interface sh dot-source

<分区>

我有一个文件要在 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

谁能告诉我我可能做错了什么或遗漏了什么?

最佳答案

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

使用 bash 解释器运行脚本

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

$ sh xRUN 

要改为使用 bash 更改和解释脚本

$ bash xRUN 

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

使用点命令使脚本 bourne 兼容

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

更改行:

source set_puregev_env

与:

. set_puregev_env 

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

使脚本可执行

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

$ ./xRUN

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

关于bash - "source"shell 脚本中的命令不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48785324/

相关文章:

linux - 我创建了一个带有时间戳的文件,由于某种原因我无法在文件中添加换行符

shell exec命令没有运行ffmpeg

perl - 使用 -n 或 -p 选项时是否可以将命令行参数传递给 @ARGV?

audio - 如果我有 CUE 文件,如何分割 M4B 文件?

python - subprocess.communicate() 仅在从脚本运行时神秘地挂起

linux - 对 Bash 中的文件描述符感到困惑(ffmpeg 视频捕获)

bash - tr 输出到新行

linux - 使用linux命令在与目录结构匹配的行末尾添加字符串

bash - 带有两个按钮但没有文本输入的 zenity 对话框窗口

java - 是否可以记忆起 Java 中的 println?