【问题标题】:Remote ssh command with arguments [duplicate]带参数的远程 ssh 命令 [重复]
【发布时间】:2018-06-19 09:26:51
【问题描述】:
我知道我可以使用 ssh -t login@machine "command" 从另一台机器远程运行命令,但是我正在努力运行这样更复杂的命令:
watch "ps aux | awk '{print $1}' | grep php-fpm | wc -l"
我正在尝试使用不同类型的引号,但是虽然 watch 命令似乎正在触发,但它显示的错误如下:
awk:命令。行:1:{打印 awk:cmd。行:1:
^ 意外的换行符或结束
字符串
【问题讨论】:
标签:
bash
awk
ssh
remote-access
remote-server
【解决方案1】:
问题是$ 在传递给ssh 命令之前由shell 扩展。在将其传递给ssh as
之前,您需要通过转义它来剥夺它的特殊含义
本地
ssh -t login@machine watch "ps aux | awk '{print \$1}' | grep php-fpm | wc -l"
您看到的错误是因为当 shell 尝试扩展 $1 时,它找不到它的值并留下一个空字符串,这导致传递给 awk 的参数数量不正确。
您也可以用简单的逻辑替换包含awk 和grep 的shell 管道
ssh -t login@machine watch "ps aux | awk '\$1 == \"php-fpm\"{count++}END{print count}'