2017-05-02 23 views

回答

1

如果你反引用這樣的hostname`主機名`那麼它是一個將在本地主機上執行的命令。如果你真的要執行它的遠程主機上,然後用​​

嘗試:

ansible all -m shell -a "/bin/ping -c3 {{inventory_hostname}}" 

如果你想在目標主機執行hostname,然後逃離backquote,使其不被解釋本地機器上的shell。

ansible all -m shell -a "/bin/ping -c3 \`hostname\`" 
+0

所以沒有辦法使用反引號\執行遠程節點上的命令'some_commad \' 是否有可能通過劇本? –

+1

@v_i_s_h檢查我的更新。 – helloV

+0

FYI ansible all -m shell -a「/ bin/ping -c3 \\'hostname \\'」不起作用 –

0

添加到helloV答案,而​​從你的清單文件拍攝,你可能也想看看

  • {{ ansible_nodename }} - 主機名作爲系統報告它
  • {{ ansible_hostname }} - 不合格的主機名顯示第一個週期之前的字符串(。)

如果您確實想要使用輸出的hostname命令,而不是ansible聚集的事實,你應該在你的命令中使用單引號,像

ansible all -m shell -a '/bin/ping -c3 `hostname`' 

單引號將保留確切語法傳遞到遠程主機,而當你使用雙引號,表示將在傳遞到託管主機之前在主節點上進行評估

請參閱Difference between single and double quotes in Bash以備將來參考。

而且,所以請使用$(command)語法而不是`command`,看到https://unix.stackexchange.com/questions/126927/have-backticks-i-e-cmd-in-sh-shells-been-deprecated

+0

ansible all -m shell -a'/ bin/ping -c3'hostname''正在保存命令就是這樣。 ping:未知主機'hostname' –

+0

http://www.grymoire.com/Unix/Quote.html有關於單引號和雙引號的詳細信息 –

+0

確定嗎?你的目標系統是什麼?在centos6和opensuse上分別命令 ansible -i 10.0.8.82,127.0。1 -m殼-a '/ bin中/平-c3 $(主機名)' 出品期望的結果 – Andrew