如何判断当前bash脚本是否已从调用脚本中调用

时间:2019-07-10 16:01:07

标签: java linux bash

我有一个脚本,理想情况下将以两种不同的方式使用。一,从命令行独立运行。从位于/etc/init.d的服务脚本中两次调用。

我希望脚本(称为run_app.sh)按以下方式工作:

#/bin/bash
# this is run_app.sh. It should be able to be run stand-alone or called from another script

if [ invoked by a calling script ] then
   java -cp . -jar blah.jar  
else
   nohup java -cp . -jar blah.jar 2>&1 &

,因此它是我需要帮助的“由调用脚本调用”。谢谢。

2 个答案:

答案 0 :(得分:1)

如果您打算通过发布./run_app.sh或服务来启动脚本。您可以只使用$0

#!/bin/bash
# this is run_app.sh. It should be able to be run stand-alone or called from another script

this_script_name="run_app.sh"

if [ "$0" == "./${this_script_name}" ] then
   java -cp . -jar blah.jar  
else
   nohup java -cp . -jar blah.jar 2>&1 &

答案 1 :(得分:0)

我建议您使用命令行参数,而不是尝试查找脚本的调用方式。

脚本app.sh

#/bin/bash
# this is run_app.sh. It should be able to be run stand-alone or called from another script

if [ "$1" = "--service" ] then
   java -cp . -jar blah.jar  
else
   nohup java -cp . -jar blah.jar 2>&1 &
fi

从调用脚本运行app.sh中以app.sh --service手动运行脚本。

如果您需要将其他命令行参数传递给脚本,则可能必须实现一些更好的选项解析。

注意:选中$0在某些情况下可能有效,但在某些其他情况下可能无效。试图找出有关父进程的细节更加困难和脆弱。

另一个说明:您的java命令行参数-cp . -jar blah.jar取决于当前目录。为确保此方法在所有情况下均有效,该脚本应在调用cd之前java进入正确的目录。例如cd $(dirname "$0")(如果脚本与blah.jar位于同一目录。