incapaz de ler a saída para executar o próximo comando [closed]

0

Quando este script é executado, recebo o PID. Agora eu quero ler a saída "PID" e executar o próximo comando desta maneira:

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
    
por terdon 15.01.2015 / 15:12

1 resposta

1

  • meu entendimento é que a segunda parte do seu código dá um PID, e você quer aplicá-lo.
  • e também o ps duplo é um erro de digitação.

algo como

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

notas

  • que o grep irá grep (você pode querer adicionar | grep -v grep no final)
  • Não sei se a sintaxe $( ... ) pode espalhar linhas.

EDITAR:

nesse caso, tente

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

que é intuitivo silencioso.

  • o recurso grep do awk /:"$port"/ irá capturar a porta
  • split, escolherá o PID em A [1]
  • finalmente, usamos ps -p %d -f --no-headers para emular ps -ef | grep PID
  • e nós o demos ao remoto bash
por 15.01.2015 / 15:24