出力を評価せずにパイプラインコマンドをエクスポートしますか?

出力を評価せずにパイプラインコマンドをエクスポートしますか?

指定したPIDに基づいてexport有効なプロセスを設定しようとしています。コマンドを実行するとうまくいくようです(もしkillpgrepkill $(pgrep myAppName)「マイアプリケーション名」実際に実行されているプロセスの名前です。)...しかし、このコマンドをエクスポートした環境変数としてどのように保存できますか?私が考えることができるコマンドのすべてのバリアントは、pgrep myAppName同様の値20137(または同様のPID値)で評価しようとしているように見え、エクスポートされた変数を最初に実行したときに機能しますが、その後は明らかには機能しません。コマンドが実際にはいkill 20137、プロセスが終了しました。

$KILL_APPNAMEコマンドを実行するたびにプロセスの終了などのコマンドを入力できるように、変数を正しく保存するにはどうすればよいですか。

答え1

私は何ですか?考えるevalあなたは仕事をするために何をすべきかをしようとしています:

THING="eval kill \$(pgrep myAppName)"
$THING

zshただし、これは厄介で、デフォルトではすべてのシェルでは機能しません(たとえば、機能するようにオプションを設定できますが、デフォルトでは機能しません)。何をしても、次の関数のように、よりクリーンでシンプルなもので解決する方が良いでしょう。

kill_my_app() {
    kill $(pgrep myAppName)
}
kill_my_app

または、他の人がコメントで指摘したように、必要なものを正確に実行するpkillorを使用してください。killall

関連情報