带参数的远程 ssh 命令

Remote ssh command with arguments

我知道我可以 运行 使用 ssh -t login@machine "command" 从另一台机器远程命令,但是我正在努力 运行 像这样更复杂的命令:

 watch  "ps aux  | awk '{print }' | grep php-fpm | wc -l"

我正在尝试使用不同类型的引号,但是尽管 watch 命令似乎在触发,但它显示的错误如下:

awk: cmd. line:1: {print awk: cmd. line:1:
^ unexpected newline or end
of string

问题是 $ 在传递给 ssh 命令之前由 shell 扩展。您需要通过在将其传递给 ssh as

之前将其转义来剥夺其在 locally 的特殊含义
ssh -t login@machine watch "ps aux | awk '{print $1}' | grep php-fpm | wc -l"

您看到的错误是因为当 shell 试图扩展 </code> 时它没有找到它的值并留下一个空字符串,这导致传递给 [= 的参数数量不正确16=].</p> <p>您也可以用一个简单的逻辑</p>替换包含<code>awkgrep的shell管道

ssh -t login@machine watch "ps aux | awk '$1 == \"php-fpm\"{count++}END{print count}'