다음 명령을 실행하기 위해 출력을 읽을 수 없습니다.

다음 명령을 실행하기 위해 출력을 읽을 수 없습니다.

이 스크립트가 실행되면 PID를 얻습니다. 이제 출력 "PID"를 읽고 다음 명령을 다음과 같이 실행하고 싶습니다.

ps -ef | grep -i PID  
ps -ef | grep -i PID  

while read -r -u10 server port line  
do  
  echo ==========  server: "$server" port: "$port"  ==========  
  ssh -qn "$server" "netstat -tulpunt | grep -E ":$port "" | \
      awk '{print $7}' | grep '/' | awk -F "/" '{print $1}'  
  echo  
done 10< demo

답변1

  • 내가 이해하는 바는 코드의 두 번째 부분이 PID를 제공하고 이를 찾기 위해 grep을 원한다는 것입니다.
  • 그리고 double ps도 오타입니다.

그것은 마치

while read -r -u10 server port line
do
  echo ==========  server: "$server" port: "$port"  ==========
  pid=$(ssh -qn "$server" "netstat -tulpunt | grep -E ":$port "" | \
      awk '{print $7}' | grep '/' | awk -F "/" '{print $1}'  )
  echo "PID: $pid"
  ssh -qn "$server" "ps -ef | grep $pid"
  echo
done 10< demo

노트

  • | grep -v grepgrep은 grep 자체를 수행합니다( 마지막에 추가하는 것이 좋습니다 ).
  • $( ... )줄을 연장하는 구문이 확실하지 않습니다 .

편집하다:

이 경우에는 다음을 시도하십시오.

ssh -qn "$server" "netstat -tulpunt | awk '/:"$port"/ { split(\$7,A,\"/\" ) ; printf \"ps -p %d\n\",A[1]}' | bash "

이것은 매우 직관적입니다.

  • awk의 grep 기능이 /:"$port"/포트를 점유합니다.
  • 분할하면 A[1]에서 PID를 선택합니다.
  • ps -p %d -f --no-headers마지막으로 시뮬레이션 에 사용합니다.ps -ef | grep PID
  • 우리는 그것을 리모콘에 줬어요bash

관련 정보