--dialogスクリプトにコマンドを変数として渡すことはできますか?

--dialogスクリプトにコマンドを変数として渡すことはできますか?

現在、YesNoPromptと必要な変数を使用して呼び出すことができる再利用可能なYes / Noプロンプトを作成しようとしている次のダイアログ機能があります。

関数は次のとおりです。

function YesNoPrompt {
    dialog --begin 2 1 --no-shadow --title "$1" --hline "$2" \
        --backtitle "$3" --yes-label $4 --no-label $5 \
        --yesno "$6" 26 38 20>&1 > /dev/tty \
        || exit
    sudo reboot 
}

そして呼び出されました:

YesNoPrompt "TITLE" "HLINE" "BACKGROUND TEXT" "YES" "NO" "MAIN MESSAGE"

うまくいきますが、ユーザーがハードコードされたシャットダウンの代わりに「はい」または「いいえ」を選択し、現在機能があることを再開した場合に何が起こるかを決定するオプションを渡すことができます。

これを行う方法はありますか?

どんなアイデアでも大いに感謝します。

ベストアンサー1

dialogプロセスがゼロ以外の終了状態で終了すると、次の関数はパラメータ7のコマンドを実行します。そうでない場合 -dialogシャットダウンが成功すると、関数はパラメーター8のコマンドを実行します。

function YesNoPrompt {
    if ! dialog --begin 2 1 --no-shadow --title "$1" --hline "$2" \
        --backtitle "$3" --yes-label "$4" --no-label "$5" \
        --yesno "$6" 26 38 20>&1 > /dev/tty
    then
      eval "$7"
    else
      eval "$8"
    fi
}

||論理を完全なステートメントに書き直しますif/then/else。それ以外の場合、置換exitexitORを除くreturn)は次のsudo reboot(または置換)を許可できます。返品実装する。おそらくあなたは1つまたは別のコマンドを実行したいと思うでしょう。また、すべてのパラメータを引用しました。

eval複数の単語をコマンドとして渡したい場合はsudo reboot必須です。これにより、evalパラメータがシェル解析の別のラウンドを経るため、ワイルドカードやその他の拡張などの項目に注意する必要があります。

おすすめ記事