簡體   English   中英

如何在單個ssh命令中使用bash $(awk)?

[英]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}'

最好將heredocssh一起使用,以避免在更復雜的命令中到處轉義引號:

ssh -T myServer <<-'EOF'
uname -a | awk '{print $2}'
exit
EOF

如果您嘗試獲取主機名,請使用:

ssh myServer "uname -n"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM