2016-01-06 37 views
0

我有一個存儲SSH命令的變量,因爲我的腳本經常使用它。當存儲在一個變量中時,SSH命令選項會導致錯誤

SSH_CMD="ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes" 

不過,我運行到哪裏了SSH命令對自己的罰款,但不工作的時候使用變量

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes $host exit 0 
${SSH_CMD} $host exit 0 

第一線的偉大工程的問題。第二行失敗,消息爲No such file or directory。當我從$SSH_CMD中刪除-o UserKnownHostsFile=/dev/null時,錯誤消息是command not found。如果我刪除其他兩個選項中的任何一個,則該消息不會更改,但當$SSH_CMD只是"ssh"時,它會起作用。

是什麼導致了這個問題?

+4

在http://mywiki.wooledge.org/BashFAQ/050 –

+1

充分解釋爲什麼它不工作其他腳本中的任何問題?有沒有其他的方式來存儲命令? – user2824889

+1

BashFAQ 50列出了幾種更好的方法來存儲命令。實際上,這個特定的命令不包含任何shell元字符,所以它不應該遇到將命令存儲在變量中的任何常見問題。但是,我可以想到兩件可能導致您症狀的事情:您是否在雙引號中使用該命令(例如''$ {SSH_CMD}「$ host exit 0'),並且您確定這些命令是命令中的普通空格字符串(不是像不間斷的空格,看起來很正常,但不被shell識別)? –

回答

0

那麼爲什麼它的工作沒有任何問題在其他腳本?

很多次回答。嘗試bash的別名或bash功能:

alias my_ssh='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes' 
my_ssh $host exit 0 

或者rahter使用ssh_config~/.ssh/config

StrictHostKeyChecking no 
UserKnownHostsFile /dev/null 
BatchMode yes 

,然後你不需要任何這樣的切腹,只使用

ssh $host exit 1 
相關問題