Вся моя ошибка в сценарии оболочки.
Я делал эхо Y | apt upgrade
, который, очевидно, вызывает проблему перенаправления при вызове диалога.
Мне следовало выполнить apt upgrade -y
или wajig upgrade -y
.
Когда я впервые попробовал apt -y upgrade
, он пожаловался на неправильный синтаксис. поэтому я прибег к тому плохому уловку, который, как я забыл, применил.
Пусть другие заметят, чтобы избежать подобных проблем.
У вас ошибка в петле for
. Удалите команду ls
и добавьте переменную $f
в качестве аргумента к sed -i
, которая будет редактировать каждый filename.xml
вместо :
for f in *.xml; do sed -i "s|foo|bar|g" "$f"; done
sed ожидает входной путь в качестве параметра. Итак, попробуйте следующую конструкцию:
… | sed -i "…" /dev/stdin
Было бы еще проще использовать файлы в качестве параметра, так как это (не проверено):
sed -i "..." *.xml
Обратите внимание, что в GNU sed вы можете редактировать несколько файлов, а также в -месте. Таким образом, ваша задача сводится к:
sed -i -se 's|foo|bar|g' *.xml
-s for --separate
— это опция sed
, которая делает это.