我有一个脚本,理想情况下将以两种不同的方式使用。一,从命令行独立运行。从位于/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 &
,因此它是我需要帮助的“由调用脚本调用”。谢谢。
答案 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
位于同一目录。