2
在做這樣的事情在一個bash腳本:如何獲取從Bash中的eval開始的進程的PID?
#!/bin/bash
ls & echo $!
的ls
的PID會被打印到控制檯。但是當我將其更改爲:
#!/bin/bash
command="ls & echo $!"
eval "$command"
它將不再工作。爲什麼是這樣的,是否有解決方法?
在做這樣的事情在一個bash腳本:如何獲取從Bash中的eval開始的進程的PID?
#!/bin/bash
ls & echo $!
的ls
的PID會被打印到控制檯。但是當我將其更改爲:
#!/bin/bash
command="ls & echo $!"
eval "$command"
它將不再工作。爲什麼是這樣的,是否有解決方法?
運行在你的命令的末尾背景的命令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。
爲什麼你首先使用'eval'?直接的問題是'$!'在你賦給'command'時被擴展了,因爲它是用雙引號引起來的。改用單引號。 – chepner
原因是,我試圖解決這裏描述的問題:https://stackoverflow.com/questions/44734291/subprocesses-started-by-script-using-eval-are-not-interrupted-on-ctrlc將pid寫入文件。仍然沒有設法讓它工作。 – Johan