2016-09-10 4 views
0

上書きします:xargsが、私は次のコードで作成したダイアログを持っているダイアログの終了ステータス

exec 3>&1 
    selection=$(echo " --backtitle \"Patches\" 
    --extra-button --extra-label \"See File List\" 
    --title \"Patches\" --clear --ok-label \"Create\" --cancel-label \"Exit\" 
    --menu \"Please select:\" $HEIGHT $WIDTH 25 $gridData" | 
    xargs dialog 2>&1 1>&3) 
    exit_status=$? 
    exec 3>&- 

ダイアログがOKに加えて、追加のボタンを持っている/ペアをキャンセル(私はそれらを名前を変更しましたが)。余分なボタンがクリックされない限りうまくいきます。その場合、$ exit_statusはキャンセルボタンがクリックされたのと同じ値(123)を持ちます。 xargsがそれを妨害することなくダイアログのステータスを得る方法はありますか? xargsman pageによると

+2

複数のダイアログボックスを同時に作成しようとしている場合は、 'xargs'しか使用しません。ここにそれの必要はありません。 – chepner

答えて

2

xargs exits with the following status: 
    0 if it succeeds 
    123 if any invocation of the command exited with status 1-125 
    124 if the command exited with status 255 
    125 if the command is killed by a signal 
    126 if the command cannot be run 
    127 if the command is not found 
    1 if some other error occurred. 

あなたがここに達成するために何をしようとしていますか?この場合、xargsが必要な理由はわかりません。あなたは代わりにそうように、直接dialogを呼び出す必要があります:

dialog --backtitle Patches \ 
    --extra-button --extra-label "See File List" \ 
    --title Patches --clear --ok-label Create --cancel-label Exit \ 
    --menu "Please select:" $HEIGHT $WIDTH 25 "$gridData" 

これは$gridDataは(そのよう"やスペースなど)特殊文字が含まれている場合でも動作します。

+0

ダイアログの終了ステータスは、どのボタンがクリックされたかを判断する唯一の方法であるため、重要です。 –

+2

@TichomirMitkov申し訳ありませんが、わかりました。つまり、ここで 'xargs'は必要ありません。直接' dialog'を呼び出してください。 – redneb

+0

空白のために必要です。 $ gridDataには二重引用符で囲まれたフィールドがあります。 –

関連する問題