私は次のスクリプトを持っています:
#!/bin/bash
set -e
TITLE="Choose version"
VERSIONS=$(cat <<'END'
AAA
BBB
END
)
VERSION_LIST=$(echo "$VERSIONS" | awk '{print NR, " ", $0}')
INDEX=$(whiptail \
--no-cancel \
--menu "$TITLE" 15 40 15 \
$VERSION_LIST \
3>&1 1>&2 2>&3)
実行可能にして実行すると、意図したとおりに動作します。 bashまたはzshからsource
を使用して呼び出すと、次のいずれかのシナリオが発生します。
ls somefile
と入力してを押すことです。 TAB 完成のために。私はFedora29を使用していますが、MacOSでもこの動作を確認できます。ソーススクリプトでホイップテール/ダイアログを使用するときに考慮する必要がある特定の考慮事項はありますか?
スクリプトは、errexit
フラグをset -e
で設定します。それを調達した後、チェックされていない失敗したコマンドはシェルを終了させます。プログラム可能な補完スクリプトを使用している場合、一部のスクリプトで失敗するコマンドが実行される可能性があります。これにより、タブ補完によってトリガーされる理由が説明されます。
ここでの解決策は、スクリプトを入手せずに通常どおりに実行するか、set -e
を関連するすべてのコマンドで十分なエラーチェックに置き換え、失敗した場合はreturn
に置き換えることです。 (exit
ではありません。シェル全体が終了するため、return
はソーススクリプトから返されます。)