Как выбрать опцию внутри цикла while в bash
Имена пакетов хранятся в текстовом файле и группируются по символу строки #step{1,2,3...}, что я хотел бы сделать: step1) для выполнения emerge --pretend package
, шаг2) вручную собрать флаги USE из предположительно появляющегося результата выполнения, показанного на экране, установить make.conf, а затем шаг 3) выполнить emerge package
, Чарльз дал мне отличную демонстрацию того, как бороться с символом строки #step здесь.
У меня вопрос: если текстовый файл выглядит так, как показано ниже, который содержит только имена пакетов, можно ли использовать демонстрацию Чарльза или как мне ее переписать? В функции getSteps() в строке printf '%s\n' "$line"
Я немного изменил, это не сработало.
Есть идеи? Спасибо! Текстовый файл, содержащий имена пакетов:
#step1
grub
genkernel
sys-kernel/gentoo-sources
sys-apps/pciutils
...
#step2
dev-libs/boost
sys-cluster/ceph
sys-fs/lvm2
...
Демонстрация Чарльза по адресу: здесь
То, что я хотел бы иметь что-то вроде:
getSteps() {
local running=0
while read -r line; do
if (( running )); then
if [[ $line = "#"* ]]; then
return
else
# printf '%s\n' "$line"
#step 1)
emerge --pretend $line
#step 2)
select packageType in "PACKAGEUSE" "PACKAGEKEYWORDS" "PACKAGELICENSE"
do
case $REPLY in
1) read USE flags as an input
set make.conf
#step 3)
emerge $line
;;
2) ....
done
fi
else
[[ $line = "#"$1 ]] && running=1
fi
done <stepFile
}
Эта строка ниже сработала, но проблема в том, что цикл while будет продолжаться, у пользователя нет возможности выбрать опцию и затем продолжить. Есть идеи?
printf '%s\n' "emerge --pretend $line" | sh -
Кроме того, возможно ли сохранить выходные данные в переменной для дальнейшего анализа?
1 ответ
Проблема решена попыткой этого. добавлять (your code here) </dev/tty
между вашим кодом, как показано ниже.
getSteps() {
local running=0
while read -r line; do
( if (( running )); then
if [[ $line = "#"* ]]; then
return
else
# printf '%s\n' "$line"
#step 1)
emerge --pretend $line
#step 2)
select packageType in "PACKAGEUSE" "PACKAGEKEYWORDS" "PACKAGELICENSE"
do
case $REPLY in
1) read USE flags as an input
set make.conf
#step 3)
emerge $line
;;
2) ....
done) </dev/tty
fi
else
[[ $line = "#"$1 ]] && running=1
fi
done <stepFile
}