2013-01-07 156 views
0

我是Linux新手,shell和腳本。無論我嘗試Google多少次,我都遇到過一個問題,我無法找到答案。將字符串或數組中的代碼插入到whiptail中

我有一個腳本爲一個名爲「whiptail」的程序創建菜單項,這似乎是在Debian上爲Raspberry Pi顯示對話框和菜單項的標準方式。列表項是根據Linux機器上各種文件中的各種數據創建的。我的代碼開始

#!/bin/sh 

該列表在腳本頂部的#!/ bin/sh環境中創建。

然而,爲了例子可以定義列表如下:

LIST="\"Tag 1\" \"Item 1\" \\ \n\"Tag 2\" \"Item 2\" \\ \n" 

的作品是代碼:

while true; do 
TESTRESULT=$(whiptail --menu "Test" 20 80 12 --cancel-button Cancel --ok-button Select \ 
    "Tag 1" "Item 1" \ 
    "Tag 2" "Item 2" \ 
    3>&1 1>&2 2>&3) 
RET=$? 
if [ $RET -eq 1 ]; then 
    echo "Cancel" 
    exit 0 
elif [ $RET -eq 0 ]; then 
    echo "Do something with the selection stored in TESTRESULT" 
    exit 0 
else 
    exit 1 
fi 

我無法弄清楚如何更換

"Tag 1" "Item 1" \ 
    "Tag 2" "Item 2" \ 

與「LIST」變量中的項目。我有一種感覺,答案在於「eval」,但我有問題將其作爲一種解決方案。

我也在玩創建列表作爲數組,但我認爲這也使事情變得複雜。

任何一個好心的想法?

回答

0

我也意識到每個菜單項末尾的「\」可能會告訴shell將「視爲一行」而不是分開菜單項,但在重新格式化「LINE」以充當單行列表,我仍然使用

"TESTRESULT=$(whiptail --menu "Test" 20 80 12 --cancel-button Cancel --ok-button Select $LIST 3>&1 1>&2 2>&3) 

如果在$()容器中使用它是與$ LIST我想知道有問題。

0

沒想到弄明白了。問題在於字符串被分解的方式。更改IFS(內部字段分隔符)並再次將其更改回來允許使用我想要的空格:

oIFS="$IFS"; 
IFS="/" 

LIST="Tag 1/Item 1/Tag 2/Item 2" 

while true; do 
TESTRESULT=$(whiptail --menu "Test" 20 80 12 --cancel-button Cancel --ok-button Select $LIST 3>&1 1>&2 2>&3) 
RET=$? 
if [ $RET -eq 1 ]; then 
    echo "Cancel" 
    exit 0 
elif [ $RET -eq 0 ]; then 
    echo "Do something with the selection stored in TESTRESULT" 
    exit 0 
else 
    exit 1 
fi 
done 

IFS=$oIFS 
相關問題