2012-05-24 54 views
3

在我的腳本中,我創建了一個文件,我想用它作爲對話框程序的輸入源,以填充菜單對話框。對話框顯示一個菜單,其中包含來自文件的輸入

在文件中,每一行都包含一個數字和一個菜單標題。

INPUT="" 
rm result 
while read LINE 
do 
     case $LINE in 
      '/ >'*|---*|'/ > '*) 
        continue;; 
      esac 
#  echo "1 $LINE " 
       echo -n " 1 \"$LINE\"" >>result 
done < tmpfile 
#printf "%s " $INPUT 
DIALOG --menu "Latest news " 20 50 30 `cat result` 

對話框是一個函數,這是源:

DIALOG() { 
     dialog --backtitle "$TITLE" "[email protected]" 
     return $? 
} 

每個菜單項對話框需要一個已識別(在我的例子是多少)和標籤(雙引號」,如果是多個單詞)

的問題是,即使該文件內容的格式是否正確:

1 "item number 1" 2 "item number 2" ... 

對話框命令不能識別\「作爲標籤分隔符,但它將其視爲字符串的一部分,導致一個雜亂的菜單,其中每個單詞都有一個菜單語音。

但如果我嘗試將相同的文件內容直接複製並粘貼到shell命令中(而不是使用腳本),菜單顯示正確。

有什麼想法?

回答

4

你可以使用一個數組來保持效果,然後用適當的引用將其發送到dialog

ar=() 
while read n s ; do 
    ar+=($n "$s") 
done < result 
dialog --menu "Latest news " 20 50 30 "${ar[@]}" 

你可能不必再創建一個臨時文件,你可以填充陣列權先。

+0

同樣的問題。如果我使用「$ {ar [@]}」,我收到以下錯誤:「錯誤:預期的2個參數,僅找到1」。即使數組的回顯顯示正確的輸出。任何想法? – Ivan

+1

@Ivan:在'result'文件中,你應該將這些值保持在不同的行上。 – choroba

1

問題是空間。如上所述,設置IFS = $'\ n'並將結果文件中的值保存在單獨的行中。

相關問題