guake
ターミナルを.bashrc
に強制終了するエイリアスコマンドを追加しました
alias killguake="kill -9 $(ps aux | grep guake | head -n -1 | awk '{print $2}')"
しかし問題は、サブコマンド、つまりps aux | grep guake | head -n -1 | awk '{print $2}'
が端末の起動時に実行され、killguake
がkill -9 result_of_subcommand
に設定されることです。
killguake
を実行するたびにサブコマンドが実行/計算されるように設定する方法はありますか? guakeの最新のPIDを持つことができるようにします。
kill
を使用してxargs
にパイプ接続することも試みましたが、これも同じ結果になり、起動時にすべてが計算されます。これは私がパイピングで試したものです
ps aux | grep guake | head -n -1 | awk '{print $2}' | xargs -I{} kill -9 {}
代わりにpkill
を使用してください:
alias killguake='pkill guake'
これは、ps
によって出力されたプロセステーブルを解析するよりもはるかに安全です。
そうは言っても、エイリアスがなぜあなたの望むことをしないのかを説明しますが、実際にはse pkill
です。
あなたのエイリアス
alias killguake="kill -9 $(ps aux | grep guake | head -n -1 | awk '{print $2}')"
二重引用符で囲まれています。これは、シェルがシェル初期化スクリプトでその行を解析するときに、コマンド置換($( ... )
)を実行することを意味します。したがって、ファイルを実行するたびに、後でguake
をkillするためのエイリアスを与える代わりに、実行中のguake
プロセスをkillするためのエイリアスを与えます今。
(alias
を使用して)エイリアスをリストすると、このエイリアスは次のようになります。
killguake='kill -9 91273'
または多分ちょうど
killquake='kill -9'
シェルの起動時にguake
が実行されていなかった場合。
これを修正するには(ただし、実際にはpkill
を使用)、単一引用符を使用し、Awkスクリプト(現在は二重引用符で囲まれています)で$
をエスケープする必要があります。
alias killguake='kill -9 $(ps aux | grep guake | head -n -1 | awk "{print \$2}")'
Oneこのアプローチの一般的な問題の1つは、他のユーザーに属するプロセスと一致することです。もう1つは、目的のプロセスの代わりに、grep guake
コマンドを見つける可能性があることです。もう1つは、プロセスが見つからなかった場合にエラーをスローすることです。もう1つは、1つの機能を実行するために5つの外部ユーティリティを呼び出すことです。
Pkillを使用して、ホイールを再発明しないでください!
alias killguake="pkill -9 guake"