この問題を解決する方法を知っている人はいますか?
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で直接実行すると、すべてが正常です。
find
unzip
(、および見つかったファイルに対してさまざまな操作を実行するため、この「while」部分が必要ですgrep
。)
ありがとう
ベストアンサー1
二重引用符内に表示されるため、$i
コマンド文字列の一部として渡される前に拡張(空)されます。ansible
エスケープする必要があります... do echo \$i; ...
。
しかし、技術的には、正規表現$
の一部であるバックスラッシュに対して同じことを行う必要があります(例:)。その後の文字はエスケープ定義シーケンスまたは拡張文字'.*\\(tar\\|zip\\)\$'
として解釈されないため、実際にはそうする必要はありません。$
したがって、シェルはこれを無視しますが、「ただ動作する」構文を使用すると常に不安になります。