我已經編寫了一個bash腳本來在後臺運行服務並從腳本退出到命令行。但是在運行eval命令後,控制不會執行下一條語句。在運行eval命令後控制下一個語句
COMMAND="nohup java -jar jenkins.war"
echo "starting service"
eval $COMMAND
echo "service running"
exit
回聲「服務運行」並退出從不發生。我想在後臺運行該進程,並在服務仍在運行時返回到命令提示符。我該怎麼做呢?
我已經編寫了一個bash腳本來在後臺運行服務並從腳本退出到命令行。但是在運行eval命令後,控制不會執行下一條語句。在運行eval命令後控制下一個語句
COMMAND="nohup java -jar jenkins.war"
echo "starting service"
eval $COMMAND
echo "service running"
exit
回聲「服務運行」並退出從不發生。我想在後臺運行該進程,並在服務仍在運行時返回到命令提示符。我該怎麼做呢?
請不要在字符串中輸入其參數的命令。將您的命令及其參數置於數組(並且不使用大寫變量名稱,這是非常糟糕的做法),並且不使用eval
。 eval
是邪惡的!
command=(nohup java -jar jenkins.war)
echo "starting service"
"${command[@]}" 2> /dev/null &
echo "service running"
&
是讓該命令在後臺運行。
感謝它的工作。我有一個子問題。現在,在回顯「服務運行」後,它返回到命令提示符,但它顯示「nohup:將輸出追加到'nohup.out',並且在我按下ctrl + c之前不會返回到命令提示符。我如何直接進入命令提示符沒有按ctrl + c?我不介意保存輸出到任何文件名,但過程不應該停止任何時間,直到我殺了它 – user1164061
@ user1164061你不必按Ctrl + C,只需按Enter鍵。編輯我的文章,這樣你就不會有惱人的信息 –
對於'eval'註釋+1,''$ {command [@]} +10「 – l0b0
eval不能解決這個問題,您需要'後臺運行'字符,即'&'(不含引號)。
重寫你行
#eval $COMMAND
$COMMAND &
根據還有什麼你真的在$ COMMAND,你可能需要把eval
回來。
另外,根據您的需要,在後臺運行的過程中會產生一些jobs
輸出,即
[1] 10079
到控制檯的STD-錯誤。您需要一些額外的語法將其重定向到/ dev/null。這裏有一個例子:
COMMAND="sleep 10"
{ $COMMAND & ; } 1>/dev/null 2>&1
使用過程組({ .... ; }
應該不會引起任何問題,但它可能
IHTH
的符號添加到通話結束。
eval $COMMAND &
嘗試:
command="java -jar jenkins.war"
echo "starting service"
$command </dev/null >jenkins.out 2>jenkins.err &
echo "service running"
謝謝大家誰回答了這個問題,並幫助我! :-) – user1164061