无法读取输出以运行下一个命令

无法读取输出以运行下一个命令

当这个脚本被执行时,我得到了 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 它。
  • 而且双 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 将 grep 本身(您可能希望| grep -v grep在最后添加)
  • 我不确定$( ... )语法是否可以扩展行。

编辑:

在这种情况下,请尝试

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

这是非常直观的。

  • awk 的 grep 功能/:"$port"/将抢占端口
  • split,将选择A[1]中的PID
  • 最后,我们用来ps -p %d -f --no-headers模拟ps -ef | grep PID
  • 我们把它交给了远程bash

相关内容