【问题标题】:"source" command in shell script not working [duplicate]shell脚本中的“source”命令不起作用[重复]
【发布时间】:2018-02-14 10:50:23
【问题描述】:

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

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

【问题讨论】:

  • 顺便说一句,这个文件是-rw-r--r--。 1
  • set_puregev_env 的路径是什么,运行脚本时的工作目录是什么?
  • 我不太确定是否重复:在我看来,source 运行但找不到文件。众所周知,我的钱在不在当前目录中的文件上。

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


【解决方案1】:

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

使用 bash 解释器运行脚本

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

$ sh xRUN 

要改用 bash 来更改和解释脚本

$ bash xRUN 

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

使用点命令使脚本兼容

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

换行:

source set_puregev_env

与:

. set_puregev_env 

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

使脚本可执行

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

$ ./xRUN

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

【讨论】:

  • 在 ubuntu 中,sh 是指向命令解释器的符号链接,通常是 bash、dash 或 ash。
猜你喜欢
  • 2021-05-27
  • 1970-01-01
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 2021-10-23
  • 1970-01-01
相关资源
最近更新 更多