Ansible:“shell”和“command”模块之间的区别

Dmi*_*dev 1 linux ansible

Ansible 维基

给定的命令将在所有选定的节点上执行。它不会通过外壳进行处理,所以像$ HOME和操作变量,例如<>|;&不工作(使用shell模块,如果你需要这些功能)。

但是在 Ansible 中它们没有区别:

[oracle@temp ansible]$ ansible temp2 -m shell -a "ls -la $HOME"
temp2 | CHANGED | rc=0 >>
total 40
drwx------. 6 oracle dba   4096 May 16 15:31 .
drwxr-xr-x. 3 root   root    20 Mar 18 18:45 ..
drwx------. 3 oracle dba     17 May 16 15:31 .ansible
-rw-------. 1 oracle dba   8100 Apr 17 12:50 .bash_history
-rw-r--r--. 1 oracle dba     18 Aug 24  2018 .bash_logout
-rw-r--r--. 1 oracle dba    257 Mar 19 10:53 .bash_profile
-rw-r--r--. 1 oracle dba    231 Aug 24  2018 .bashrc
drwx------. 3 oracle dba     16 Mar 22 12:19 .cache
drwx------. 4 oracle dba     28 Mar 22 12:19 .config
drwx------. 3 oracle dba     19 Mar 22 12:19 .local
-rw-------. 1 oracle dba  10425 Apr 16 14:50 .psql_history
-rw-------. 1 oracle dba    713 Mar 19 11:15 .viminfo

[oracle@temp ansible]$ ansible temp2 -m command -a "ls -la $HOME"
temp2 | CHANGED | rc=0 >>
total 40
drwx------. 6 oracle dba   4096 May 16 15:31 .
drwxr-xr-x. 3 root   root    20 Mar 18 18:45 ..
drwx------. 3 oracle dba     17 May 16 15:31 .ansible
-rw-------. 1 oracle dba   8100 Apr 17 12:50 .bash_history
-rw-r--r--. 1 oracle dba     18 Aug 24  2018 .bash_logout
-rw-r--r--. 1 oracle dba    257 Mar 19 10:53 .bash_profile
-rw-r--r--. 1 oracle dba    231 Aug 24  2018 .bashrc
drwx------. 3 oracle dba     16 Mar 22 12:19 .cache
drwx------. 4 oracle dba     28 Mar 22 12:19 .config
drwx------. 3 oracle dba     19 Mar 22 12:19 .local
-rw-------. 1 oracle dba  10425 Apr 16 14:50 .psql_history
-rw-------. 1 oracle dba    713 Mar 19 11:15 .viminfo
Run Code Online (Sandbox Code Playgroud)

是什么原因?

Ulr*_*arz 8

您在双引号中传递参数。$HOME由本地机器上的 shell 扩展,ansible 甚至看不到它。如果您改用单引号,您应该能够看到不同之处。(如果远程计算机上不存在该路径,您也会注意到。)