このコマンドラインが機能しないことがわかりました
ssh i01n10 "/usr/sbin/lsof -p $(pgrep -nf a.out)"
エラーが表示されます
lsof:プロセスIDが指定されていません。
しかし、
ssh i01n10 "$(pgrep -nf a.out)"
PIDを正しく提供してください
なぜlsof
PIDを見ることができないのですか?
ベストアンサー1
lsof
シェル拡張のため、このコマンドはPIDを表示できません。これは$(pgrep -nf a.out)
、リモートサーバーではなくローカルサーバーで実行されることを意味します。
この拡張を防ぐには、二重引用符の代わりに一重引用符を使用してください。
簡単な例:
$ foo=local
$ ssh debian8 "foo=remote; echo $foo"
local
$ ssh debian8 'foo=remote; echo $foo'
remote
コマンドに問題がある可能性がありますpgrep
。以下は、-of
フラグの代わりに使用した簡単なテストです-nf
(-af
フラグを使用した完全なコマンドを参照)。
// on remote server
# sleep 200 &
[1] 27228
# exit
// on local host
$ ssh debian8 'echo $(pgrep -nf sleep)'
27244 <-- not expected pid
$ ssh debian8 'echo $(pgrep -of sleep)'
27228 <-- this one
これは自分自身を一致として報告するのではなく、親シェルを報告する$()
サブシェルを効果的に開始します。pgrep
したがって-n
、オプションを使用すると、実際のpidではなく、pgrep
独自のpidが提供されます。