2017-06-24 70 views
2

在做這樣的事情在一個bash腳本:如何獲取從Bash中的eval開始的進程的PID?

#!/bin/bash 
ls & echo $! 

ls的PID會被打印到控制檯。但是當我將其更改爲:

#!/bin/bash 
command="ls & echo $!" 
eval "$command" 

它將不再工作。爲什麼是這樣的,是否有解決方法?

+0

爲什麼你首先使用'eval'?直接的問題是'$!'在你賦給'command'時被擴展了,因爲它是用雙引號引起來的。改用單引號。 – chepner

+0

原因是,我試圖解決這裏描述的問題:https://stackoverflow.com/questions/44734291/subprocesses-started-by-script-using-eval-are-not-interrupted-on-ctrlc將pid寫入文件。仍然沒有設法讓它工作。 – Johan

回答

1

運行在你的命令的末尾背景的命令eval

#!/bin/bash 

cmd="ls > /dev/null &" 
eval "$cmd" 
eval_pid=$! 
bash_pid=$$ 

echo bash_pid: ${bash_pid}, eval_pid: ${eval_pid} 

輸出:

bash_pid: 25926, eval_pid: 25927 

要獲取eval推出進程的PID。