Bash
Bash 腳本(使用 java 命令)不退出(腳本 2)
我啟動了一個 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 &
謝謝大家!