Если вы используете "точечный" стиль вывода прогресса, который выглядит примерно так:
500K .......... .......... .......... .......... .......... 2% 496K 91s
тогда вы можете передать это (которое находится на stderr) в awk
или подобную программу и просто вывести поле "2%", показанное в последней второй колонке.
wget ... --progress=dot -q --show-progress 2>&1 |
awk 'NF>2 && $(NF-2) ~ /%/{printf "\r %s",$(NF-2)} END{print "\r "}'
Это покажет вам изменяющееся значение процента в одной строке, которая очищается в конце.
Чтобы сохранить код возврата wget
для if..else
, вы можете попросить bash заставить трубопроводы возвращать код ошибки любой команды, которая потерпела неудачу (вместо только самой правой команды), задав в скрипте:
set -o pipefail
В качестве альтернативы, вы можете поместить все if..else.... fi
код без изменений внутри блока и направить stderr в конце в один более информативный awk, как предложил cas в комментариях:
( if wget ...
fi
if wget ...
fi
if wget ...
fi
) 2>&1 | awk '
/^Saving to:/ { fn = gensub(/^Saving to: /,"",1) }
NF>2 && $(NF-2) ~ /%/ { printf "\r%s %s",fn,$(NF-2) }
END { gsub(/./," ",fn); print "\r " fn }'
Или, чтобы не пропустить важные сообщения об ошибках на stderr, просто перенаправьте stderr каждой команды wget на 3-й дескриптор файла:
( if wget ... 2>&3
then ... else ... fi
if wget ... 2>&3
then ... else ... fi
if wget ... 2>&3
then ... else ... fi
) 3>&1 | awk ...
Похоже, вы неправильно используете Ansible Vault.
В документации Ansible Vault указано:
Ansible Vault is a feature of ansible that allows you to keep sensitive data such as passwords or keys in encrypted files, rather than as plaintext in playbooks or roles.
Вы не можете шифровать файлы непосредственно на удаленном хосте.
Что вы можете сделать, так это зашифровать файл на локальном хосте, а затем скопировать зашифрованный файл с помощью модуля copy
на удаленный хост. По умолчанию модуль copy
расшифровывает файл, но вы можете перезаписать его, указав decrypt: no
. Для получения дополнительной информации см. документацию по модулю копирования .
Чтобы добавить к ответу, опубликованному @fgk (, пожалуйста, рассмотрите их ответ, это просто расширение информации ), ansible-vault
не является общей утилитой шифрования файлов. Это специально для шифрования информации для использования в семействе команд Ansible для защиты конфиденциальных данных, которые в противном случае должны были бы храниться в виде простого -текста в плейбуках и файлах конфигурации.
Если вы хотите зашифровать файлы на удаленном хосте, используя ansible для выполнения задачи, вам нужно найти подходящую утилиту шифрования файлов и использовать ее для завершения шифрования, а затем автоматизировать этот процесс с помощью ansible.
Итак, две основные задачи: