我正在尝试通过 ssh 执行单个远程命令来调试设置。这不会执行正确的命令(我看不到输出,但似乎 gdbserver 缺少 PID):
ssh -t [email protected] "ps -A | grep myprocess | awk '{print $1}' | xargs -I{} gdbserver --attach 0.0.0.0:52159 {}"
在进行本地工作时:
ps -A | grep myprocess | awk '{print $1}' | xargs -I{} sudo gdbserver --attach 0.0.0.0:52159 {}
解析过程中哪里出错了?
答案1
我自己尝试了一下,并通过插入 echo 命令进行了调试:
ssh -t [email protected] "ps -A | grep rsyslogd | awk '{print $1}' | xargs -I{} echo gdbserver --attach 0.0.0.0:52159 {}"
最后一部分应该只是 PID,但是却是:
1209 ? 00:00:05 rsyslogd
我的猜测是 awk 中的 $ 符号在某处被 bash 解释并变成一个空字符串,所以 awk 命令只是{print}
。
在 $ 前添加反斜杠可以修复此问题并生成仅包含 PID 的最终命令。
ssh -t [email protected] "ps -A | grep rsyslogd | awk '{print \$1}' | xargs -I{} echo gdbserver --attach 0.0.0.0:52159 {}"