如何在bash

时间:2015-11-13 20:36:35

标签: linux bash shell gentoo

包名称存储在文本文件中,并按行符号#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 -

此外,是否可以将输出存储到变量中以进行进一步分析?

1 个答案:

答案 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
    }