【问题标题】:Unable to execute a script from another shell script无法从另一个 shell 脚本执行脚本
【发布时间】:2016-09-29 03:55:45
【问题描述】:

我有一个以#!/bin/sh shebang 开头的脚本 (A)。

还有另一个文件 (B) 不是以 #!/bin/sh 开头的;它有一些环境变量,我需要为A 设置它们才能工作。

文件B 运行良好,并在从.bash_profile 执行时设置变量。例如,在我的.bash_profile 文件中:

{. /(full_path)/(envname)/(filename).sh;}

当我在我的A 脚本文件中写入同一行时,什么也没有发生。为什么不呢?

我做了echo $env_variable_name;当通过.bash_profile 执行时,这给了我正确的路径,但在通过我的脚本A 时给了我空白。我试过了

  • /(full_path)/(envname)/(filename).sh
    
  • SCRIPT_FULL_NAME=$(readlink -f "$0")
    SCRIPT_PATH=$(dirname $SCRIPT_FULL_NAME)
    sh ${SCRIPT_PATH}/(filename).sh
    

我该怎么办?

【问题讨论】:

  • 欢迎来到 Stack Overflow。请阅读stackoverflow.com/help/how-to-ask 了解如何编写问题的指南。对于初学者: 1. 请格式化您的代码。 2. 在您的问题中添加更多代码,以帮助我们更好地理解它,并让未来的读者从这个问题中受益。 3. 寻找其他可能对您有所帮助的问题。例如stackoverflow.com/questions/8352851/… 4. 格式化您的文本,并给我们一个最小的工作示例。
  • 您的B 文件中有什么内容?确保它没有 bashisms(例如 export foo=bar 而不是 foo=bar; export foo) - 或将 A 的解释器更改为 /bin/bash。您应该能够使用sh -x A 跟踪执行;这通常有助于调试 shell 脚本。

标签: linux bash shell


【解决方案1】:

还有另一个文件 (B) 不是以 #!/bin/sh; 开头的;它有一些我需要设置的环境变量才能让 A 工作。

在这种情况下,您应该 source 在脚本 A 中编写脚本 B。要在 sh 中获取脚本,命令是:

. /path/to/B.sh

请注意,. 不是脚本 B 的相对路径的开头。

【讨论】:

  • 同时使用关键字source. 是其别名)可能更具可读性。
  • 哇,我不知道。谢谢。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多