abk*_*rim 5 ssh bash quotes double-quotes
我通过ssh阅读远程命令中的单引号转义解决方案.但是任何工作都有风险.
我尝试着
ssh root@server "ps uax|grep bac | grep -v grep | awk '{ print $2 }' > /tmp/back.tmp"
Run Code Online (Sandbox Code Playgroud)
不要工作awk
ssh root@server "ps uax|grep bac | grep -v grep | awk \'{ print $2 }\' > /tmp/back.tmp"
....
awk: '{
awk: ^ caracter ''' inválido en la expresión
Run Code Online (Sandbox Code Playgroud)
并尝试在命令上放置单个配额但也不起作用.
Aprecite帮助
该ssh命令将主机名后键入的所有文本视为要执行的远程命令.对你的问题来说,这意味着你不需要像你所做的那样引用整个命令.相反,您可以直接发送命令,就像您在远程系统上一样输入它.
这简化了处理引用问题,因为它减少了您需要使用的引号数.由于您不会使用引号,因此需要使用反斜杠转义所有特殊bash字符.
在您的情况下,您需要输入,
ssh root@server ps uax \| grep ba[c] \| \'{ print \$2 }\' \> /tmp/back.tmp
Run Code Online (Sandbox Code Playgroud)
或者你可以双引号单引号而不是逃避它们(在这两种情况下,你需要逃避美元符号)
ssh root@server ps uax \| grep ba[c] \| "'{ print \$2 }'" \> /tmp/back.tmp
Run Code Online (Sandbox Code Playgroud)
老实说,这感觉有点复杂,但我发现这个知识在处理向远程系统发送命令时非常有价值,这些系统涉及更复杂的引用.
在第一次尝试时,您使用双引号,"因此您需要转义$字符:
ssh root@server "ps uax|grep bac | grep -v grep | awk '{ print \$2 }' > /tmp/back.tmp"
?
Run Code Online (Sandbox Code Playgroud)
此外,您可以使用:
ps uax | grep 'ba[c]' | ...
Run Code Online (Sandbox Code Playgroud)
所以你不需要这个grep -v grep步骤.
| 归档时间: |
|
| 查看次数: |
10367 次 |
| 最近记录: |