Por que “lsof” não está funcionando quando usado em ssh? [duplicado]

0

Eu encontrei esta linha de comando não está funcionando

ssh i01n10 "/usr/sbin/lsof -p $(pgrep -nf a.out)"

mostra o erro

lsof: no process ID specified

No entanto

ssh i01n10 "$(pgrep -nf a.out)"

corretamente dá o PID

Por que lsof não está vendo o PID?

    
por user15964 20.04.2016 / 03:35

1 resposta

1

O comando lsof não pode ver seu PID devido à expansão do shell. Isso significa que $(pgrep -nf a.out) será executado em seu servidor local, não remoto.

Para evitar essa expansão, use aspas simples em vez de aspas duplas.

Exemplo simples:

$ foo=local
$ ssh debian8 "foo=remote; echo $foo"
local
$ ssh debian8 'foo=remote; echo $foo'
remote

Você pode ter problemas com o comando pgrep . Este é o meu teste simples usando -of em vez de -nf flags (Use -af flag para ver o comando completo):

// 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

Este $() , na verdade, lança um subshell, pgrep não se informa como uma correspondência, mas reporta seu shell pai. Portanto, usar a opção -n não fornecerá o pid real, mas o pid de pgrep em si.

    
por 20.04.2016 / 05:29

Tags