包名称存储在文本文件中,并按行符号#step {1,2,3 ...}分组,我想要做的是:step1)执行emerge --pretend package
,step2)手动从屏幕上显示的假装新兴执行结果中收集USE标记,设置make.conf,然后step3)执行emerge package
。 Charles给了我一个很好的演示,说明如何在here处理行符号#step。
我的问题是,如果下面的文本文件只包含在包名中,是否可以使用Charles的演示,或者我应该如何重写它?在printf '%s\n' "$line"
行的函数getSteps()中,我对它进行了一些修改,但它没有用。
有什么想法吗?谢谢! 包含名称的文本文件:
#step1
grub
genkernel
sys-kernel/gentoo-sources
sys-apps/pciutils
...
#step2
dev-libs/boost
sys-cluster/ceph
sys-fs/lvm2
...
查尔斯的演示位于:here
我想拥有的是:
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 -
此外,是否可以将输出存储到变量中以进行进一步分析?
答案 0 :(得分:0)
尝试this解决了问题。在您的代码之间添加(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
}