[英]How to use bash $(awk) in single ssh-command?
我試圖在ssh
上執行一個包含`sub-code`或$(sub-code)的命令(我一直使用它,但是我不知道它的正式名稱),但是要先執行目標服務器。
為了爭辯,我們說這是我要使用的命令。 當然,可以使用hostname
完成此操作,但這只是一個簡化的示例,其中包含我要使用的所有格式設置向導。
echo `uname -a | awk '{print $2}'`
沒問題。 但是,如何在單個命令中通過ssh
正確地轉義它呢? 以下是錯誤的,因為它允許服務器回復您的本地主機名。 子代碼在本地執行:
ssh myServer echo `uname -a | awk '{print $2}'`
但是,想到的任何逃避現實都行不通:
$ ssh myServer echo \`uname -a | awk '{print $2}'\`
awk: cmd. line:1: {print $2}`
awk: cmd. line:1: ^ invalid char '`' in expression
$ ssh myServer echo \$(uname -a | awk '{print $2}')
bash: syntax error near unexpected token `('
$ ssh myServer echo \$\(uname -a | awk '{print $2}')
bash: syntax error near unexpected token `)'
$ ssh myServer echo \$\(uname -a | awk '{print $2}'\)
awk: cmd. line:1: {print $2})
awk: cmd. line:1: ^ syntax error
bash: -c: line 0: unexpected EOF while looking for matching `)'
bash: -c: line 1: syntax error: unexpected end of file
我想要一個包含使用正確轉義的` or $() because I'd like to know if it's possible.
的答案, ` or $() because I'd like to know if it's possible.
回聲可能更復雜。
嘗試這個
ssh myServer "uname -a | awk '{print \$2}' "
使用雙引號"
來對將要遠程執行的命令進行分組。
您還需要在$2
參數中轉義$
,以便它不是在本地計算的,而是遠程傳遞給awk
。
編輯:
如果要包含$(
)
,則必須再次轉義$
符號,如下所示:
ssh myServer "echo \$(uname -a | awk '{print \$2}') "
您還可以轉義反引號 `,如下所示:
ssh myServer "echo \`uname -a | awk '{print \$2}'\` "
用管道傳輸命令的輸出並在本地運行awk怎么樣?
ssh yourhost uname -a | awk '{ print $2 } '
解決方法是使用命令創建一個sh文件,然后將其傳遞給ssh命令:
test.sh
echo `uname -a | awk '{print $2}'`
和命令:
ssh myServer 'bash -s' < test.sh
更新 :
不帶引號的命令也可以正常工作:
ssh myServer uname -a | awk '{print $2}'
最好將heredoc與ssh
一起使用,以避免在更復雜的命令中到處轉義引號:
ssh -T myServer <<-'EOF'
uname -a | awk '{print $2}'
exit
EOF
如果您嘗試獲取主機名,請使用:
ssh myServer "uname -n"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.