2015-11-13 69 views
1

包名存储在文本文件中,并按行号#step {1,2,3 ...}分组,我想要做的是:step1 )执行emerge --pretend package,第2步)手动收集屏幕上显示的假装显示的执行结果中的USE标志,设置make.conf,然后执行步骤3)执行emerge package。查尔斯给了我一个很好的示范,说明如何在here处理行符号#step。如何在bash中的while循环中选择一个选项

我的问题是,如果文本文件看起来像下面只包含包名,有可能使用查尔斯的演示,或者我该如何重写它?在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

为什么我要这些包分成不同步骤的原因是,在步骤1,我能够远程涌现包在另一台计算机上,这是方便我收集USE标记,但在步骤2,特别是当我尝试出现boost和ceph时,我无法远程执行此操作。甚至更多,我必须先编译内核然后出现它们。 –

+0

'emerge --pretend'的输出是什么样的?你打算如何获得USE标志?在进入下一行之前,您是否打算为每条生产线完成三个步骤? (这很好,也许是正确的想法,它不是唯一的方法,你可能想这样做。)“设置make.conf”是什么意思? –

+0

'livecd /#emerge --preep ceph 这些是可以合并的包,依次为: 计算依赖关系... done! [ebuild N] dev-libs/libaio-0.3.110 USE =“static-libs {-test}” [ebuild N] dev-libs/lzo-2.09 USE =“static-libs -examples” ... ' 它只是显示出你需要出现这些软件包的USE标志或关键字,它什么都不会做。 –

回答

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 
    } 
相关问题