Nicco Asked: 2022-02-08 08:38:17 +0800 CST2022-02-08 08:38:17 +0800 CST 2022-02-08 08:38:17 +0800 CST Ansible -m shell 和 find 命令 772 有谁知道如何解决这个问题? ansible -m shell -i test.txt -a "sudo find / -regex '.*\(tar\|zip\)$' -type f 2>/dev/null | while read i; do echo $i; done" 问题是“while”部分。它没有显示任何结果。当我直接在 Bash 中运行它时,一切正常。 (我需要这个“while”部分,因为我对找到的文件进行各种操作find,比如unzip和grep) 谢谢 find pipe 2 个回答 Voted Best Answer Gordon Davisson 2022-02-08T10:04:40+08:002022-02-08T10:04:40+08:00 由于$i出现在双引号中,因此在ansible作为命令字符串的一部分传递之前,它会被扩展(变为空)。你需要逃避它:... do echo \$i; .... 顺便说一句,从技术上讲,你应该对反斜杠做同样的事情,这$是正则表达式的一部分,比如'.*\\(tar\\|zip\\)\$'. 你真的不需要,因为它们后面的字符恰好是不能被解释为转义序列或$扩展的字符,所以 shell 将不理会它们,但使用“恰好工作”的语法总是让我紧张的。 U880D 2022-02-08T10:13:18+08:002022-02-08T10:13:18+08:00 关于第一个答案,转义$i以\$i使其正常运行。 ansible test --user ${ACCOUNT} --ask-pass --become --module-name shell --args "find /home/{{ ansible_user }} -regex '.*\(tar\|zip\)$' -type f 2>/dev/null | while read i; do echo \$i; done" 而不是sudo在 shell 参数中使用,--become可能是一种更好的方法。 关于 当我直接在 Bash 中运行它时,一切正常。 据我了解 Ansibleshell模块,它正在做类似/bin/sh -c. 如果需要 Bash,您可以在示例中通过--args "/bin/bash -c '...'". 谢谢 rawAnsible和shell有什么区别command shellAnsible和commandAnsible之间的区别 sh和之间的区别bash
由于
$i
出现在双引号中,因此在ansible
作为命令字符串的一部分传递之前,它会被扩展(变为空)。你需要逃避它:... do echo \$i; ...
.顺便说一句,从技术上讲,你应该对反斜杠做同样的事情,这
$
是正则表达式的一部分,比如'.*\\(tar\\|zip\\)\$'
. 你真的不需要,因为它们后面的字符恰好是不能被解释为转义序列或$
扩展的字符,所以 shell 将不理会它们,但使用“恰好工作”的语法总是让我紧张的。关于第一个答案,转义
$i
以\$i
使其正常运行。而不是
sudo
在 shell 参数中使用,--become
可能是一种更好的方法。关于
据我了解 Ansible
shell
模块,它正在做类似/bin/sh -c
. 如果需要 Bash,您可以在示例中通过--args "/bin/bash -c '...'"
.谢谢
raw
Ansible和shell
有什么区别command
shell
Ansible和command
Ansible之间的区别sh
和之间的区别bash