Bash

Bash 腳本(使用 java 命令)不退出(腳本 2)

  • August 7, 2015

我啟動了一個 bash 腳本(作為 glassfish 使用者從 java 同步)觸發另一個 bash 腳本:

從 java 執行的腳本 1:

#!/bin/bash

#Start script2 as myUser on myUser desktop
echo myPassword | su -c "export DISPLAY=:0.0;xhost +localhost;script2.sh;" myUser &
echo "After subscript"
#---------------
#... other tasks
#---------------
echo "Before exit"
exit 0

從腳本 1 執行的腳本 2

#!/bin/bash

# Start java app with date added by awk at the beginning of every line
java -cp .:./lib/* com.mypackage.MyClass 2>&1 | awk '{print strftime("%D %T",systime())" "$0 }' >> logFile.log &

# Start java app without date added by awk on logs
#java -cp .:./lib/* com.mypackage.MyClass 2>&1 >> logFile.log &

我的問題是除非我終止在腳本 2 中啟動的 java 程序,否則腳本 1 永遠不會退出。如果我刪除腳本 2 中的 awk 部分(如果我使用註釋的 java 命令行),則不會發生此問題。

我正在執行: - Centos 6.4 上的 GNU bash,版本 4.2.53(1)-release (x86_64-redhat-linux-gnu) - java 1.6.45 X86_64 和 Glassfish 3.1.2.2

最後我找到了解決方案。

據我了解,這是在我的腳本 2 中將兩個程序置於後台的方法。看起來**&僅適用於awk**(這可以解釋為什麼它在沒有 awk 部分的情況下工作)。

使用大括號,我可以將兩個部分(java 和 awk)放在背景中:

從腳本 1 執行的腳本 2:

#!/bin/bash

# Start java app with date added by awk at the beginning of every line
{ java -cp .:./lib/* com.mypackage.MyClass 2>&1 | awk '{print strftime("%D %T",systime())" "$0 }'; } &>> logFile.log &

謝謝大家!

引用自:https://unix.stackexchange.com/questions/220497