2015-11-13 104 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 
    } 
相關問題