이 명령줄이 작동하지 않는 것을 발견했습니다
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가 제공됩니다.