我正在尝试像这样远程关闭我的应用程序:
ssh pi@192.168.0.227 "kill $(ps aux | grep '[M]yApp' | awk '{print $2}')"
失败并提示:
<块引用>grep :术语“grep”不被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,如果包含路径,请验证路径是否正确,然后重试。
如果我先通过 SSH 登录然后执行命令,它可以工作,但我需要它是单行的。我已将 /etc/ssh/sshd_config
变量 PermitUserEnvironment
设置为 yes
,并尝试使用 grep (/bin/grep
) 的完整路径,甚至删除了管道周围的空格(这些都是答案到与我类似的问题)但没有什么可以让我通过命令。我错过了什么?
答案 0 :(得分:1)
该字符串在传递给其他主机之前由您的本地 shell 展开。由于它是一个双引号字符串,$()
中的命令在您的本地主机上运行。将此类命令传递到远程主机的最简单方法是使用“带引号的”{{3 }}:
ssh pi@192.168.0.227 <<'EOF'
kill $(ps aux | grep '[M]yApp' | awk '{print $2}')"
EOF