当这个脚本被执行时,我得到了 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