无法通过 ssh 识别“grep”

时间:2021-01-13 12:22:22

标签: bash ssh openssl

我正在尝试像这样远程关闭我的应用程序:

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) 的完整路径,甚至删除了管道周围的空格(这些都是答案到与我类似的问题)但没有什么可以让我通过命令。我错过了什么?

1 个答案:

答案 0 :(得分:1)

该字符串在传递给其他主机之前由您的本地 shell 展开。由于它是一个双引号字符串,$() 中的命令在您的本地主机上运行。将此类命令传递到远程主机的最简单方法是使用“带引号的”{{3 }}:

ssh pi@192.168.0.227 <<'EOF'
kill $(ps aux | grep '[M]yApp' | awk '{print $2}')"
EOF

类似:here document

相关问题