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

Java 如何判断当前bash脚本是否从调用脚本调用,java,linux,bash,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 .

我有一个脚本,理想情况下将以两种不同的方式使用。第一,从命令行独立运行。两个函数从位于/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 &

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

如果您计划通过发布
/run\u 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 &

我建议使用命令行参数,而不是试图找出脚本是如何调用的

脚本
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
从调用脚本run
app.sh--service
app.sh
的形式手动运行脚本

如果需要向脚本传递额外的命令行参数,可能需要实现一些更好的选项解析

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


另一个注意事项:您的
java
命令行参数
-cp-jar blah.jar
取决于当前目录。为了确保这在所有情况下都有效,在调用
java
之前,脚本应该
cd
到正确的目录中。e、 g.
cd$(dirname“$0”)
如果脚本与
blah.jar
位于同一目录中,您将如何启动该服务?SysVinit?你为什么要那样做?