我正在通过命令行启动java进程:java ...
.我们就这样称呼它吧JAVA_COMMAND
。我正在尝试在后台使用启动脚本运行此 java 命令,然后将 PID 保存到变量中,以便我可以创建一个终止进程的停止脚本:
my_app_start.sh
:
#!/bin/bash
directory=$HOME/apps/myApp/files
current_date=$(date +"%Y-%m-%d-%T")
log_path="$HOME/apps/myApp/logs"
log_file="$log_path/app_output_$current_date"
err_file="$log_path/app_error_$current_date"
nohup JAVA_COMMAND > $log_file & export MY_APP_PID=$!
然后我获取脚本,例如:
start.sh
:
source ./my_app_start.sh
然而,当我检查它时MY_APP_PID
它echo $MY_APP_PID
是空的。当我编辑my_app_start.sh
为:
#!/bin/bash
directory=$HOME/apps/myApp/files
current_date=$(date +"%Y-%m-%d-%T")
log_path="$HOME/apps/myApp/logs"
log_file="$log_path/app_output_$current_date"
err_file="$log_path/app_error_$current_date"
nohup JAVA_COMMAND > $log_file & MY_APP_PID=$! & echo $MY_APP_PID
它也是空的,但是如果我直接echo $!
输出进程 PID。
为什么会发生这种情况?为什么导出的变量为空?