Що я роблю, коли я маю команду виконувати та бажаю отримати журнал лише у разі відмови, це наступне (з префіксом командної оболонки, як /bin/sh -c '...'
у випадку, якщо ініціатор не використовує system
виклик або виконує команду безпосередньо без оболонки) :
command 2&>1 > command-log.txt || cat command-log.txt
Це призведе до переадресації помилки та стандартного виводу у файл та відображатиме вміст файлу лише у разі відмови. Якщо команда дуже багатослівна і ви не хочете вести журнал, коли це нормально, ви можете перейти з:
command 2&>1 > command-log.txt && rm command-log.txt || cat command-log.txt
Цитата &&
та ||
використання на сторінці man sh :
Символ && (||) призводить до того, що наступний список буде виконаний, лише якщо попередній трубопровід повертає нульове (не нульове) значення.
Це, мабуть, не самий ідіоматичний спосіб зробити це за допомогою ansible, але він має перевагу в тому, що він є дуже портативним з будь-якою системою управління конфігурацією, що дає можливість відображати команду stdout.