0

Linux、シェル、スクリプトは初めてです。どんなにグーグルしようとしても答えが見つからないという問題に出くわしました。

「whiptail」と呼ばれるプログラムのメニュー項目を作成するスクリプトがあります。これは、RaspberryPiのDebianでダイアログボックスとメニュー項目を表示する標準的な方法のようです。リストアイテムは、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」変数の項目を使用します。答えは「評価」にあると感じていますが、それを解決策として機能させるのにも問題があります。

LISTを配列として作成することも試していますが、それも複雑になると思います。

誰かが親切に何かアイデアを思いついた?

4

2 に答える 2

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
于 2013-01-07T18:04:44.113 に答える
0

また、各メニュー項目の最後にある「\」は、メニュー項目を分離するのではなく、シェルに「1行として扱う」ように指示している可能性がありますが、「LINE」を1行として機能するように再フォーマットした後です。リスト、私はまだ使用に問題があります

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

$()コンテナで使用されている$LISTと関係があるのではないかと思います。

于 2013-01-07T09:16:44.510 に答える