2017-06-24 9 views
2

bashスクリプトでこのような何かをやって:lsのpidがコンソールに出力されますBashでevalから起動されるプロセスのPIDを取得するには?

#!/bin/bash 
ls & echo $! 

。しかし、私がこれに変更すると:

#!/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を取得するには。

関連する問題