ps -o command
スペースで区切られた引用符のない引数を使用して、各コマンドを別々の行に表示します。
$ ps -o command
COMMAND
bash
ps -o command
これにより、参照が正しいことを確認したり、コマンドをコピーして貼り付けて再実行すると問題が発生する可能性があります。たとえば、
$ xss-lock --notifier="notify-send -- 'foo bar'" slock &
[1] 20172
$ ps -o command | grep [x]ss-lock
xss-lock --notifier=notify-send -- 'foo bar' slock
の出力は誤解を招く場合がps
あります。コピーして貼り付けようとすると、コマンドは元のコマンドと同じ操作を実行しません。だからprintf %q
実行中のコマンドのリストを印刷するBashと同じ方法はありますか?パラメーターを正しくエスケープまたは引用してください。?
ベストアンサー1
/proc/$pid/cmdline
Linux では、プロセス ID が指定されたコマンドから少しより原始的な引数のリストを取得できます。 args は null 文字で区切られます。あなたの場合は、cat -v /proc/$pid/cmdline
次のようにnulを処理してみてください。^@
xss-lock^@--notifier=notify-send -- 'foo bar'^@slock^@
次のPerlスクリプトはprocファイルを読み込み、nulを改行とタブに置き換えることができます。たとえば、次のようになります。
xss-lock
--notifier=notify-send -- 'foo bar'
slock
または、次のように再引用したコマンドを取得することもできます。
xss-lock '--notifier=notify-send -- '\''foo bar'\''' 'slock'
if(1)
次のように置き換えるとif(0)
:
perl -e '
$_ = <STDIN>;
if(1){
s/\000/\n\t/g;
s/\t$//; # remove last added tab
}else{
s/'\''/'\''\\'\'\''/g; # escape all single quotes
s/\000/ '\''/; # do first nul
s/(.*)\000/\1'\''/; # do last nul
s/\000/'"' '"'/g; # all other nuls
}
print "$_\n";
' </proc/$pid/cmdline