Bash完了と変更番号?

Bash完了と変更番号?

bashでコマンドを「dfk-1234」または「DFK-nnnnn」(数字はゼロで埋められず、1〜5桁の数字)として使用する関数、エイリアス、またはコマンド補完を作成し、次に「dfkp」コマンドを実行します。したいです。 DFK -nnnn"。

引数は言葉通りに渡さなければなりません。 「dfk-18875 cat file.txt」は「dfpk DFK-18875 cat file.txt」にする必要があります。

コマンドの完成やタブの拡張がうまくいくようですが、数字が変わったらどうすればいいのかわかりません。

最良のアプローチは何ですか?デフォルトのコマンド名を処理できるようになると、残り(大文字と小文字、パラメータなど)も処理できます。

答え1

ヘビーヒット4.0新機能の導入command_not_found_handle見つからないコマンドを処理するために - 存在する場合は、名前付き関数を呼び出します。この動作を使用して、dfk-NNNまたはDFK-NNNという名前の「プログラム」への呼び出しを傍受し、必要に応じて再実行できます。すでに4.0の動作に依存しているため、大文字と小文字のパラメータ拡張機能も使用します。

command_not_found_handle() {
  case "${1,,}" in
        (dfk-?|dfk-??|dfk-???|dfk-????|dfk-?????)
                echo dfkp "${1^^}" "${@:2}"
                return 0
        ;;
        (*)
                printf 'bash: %s: command not found\n' "$1" >&2
                return 127
        ;;

  esac
}

存在しないコマンドが入力されると、bashは元のコマンドラインを使用してこの関数を呼び出します。このステートメントは、目的のパターンとcase比較しやすくするために、最初の引数を小文字にします。dfk

コマンドdfk-が1、2、3、4、または5つの文字で始まり、終了する場合(適切と思われる数字まで締め付ける)、現在のデバッグ目的でエコーされますが、最初の引数はdfkp大文字バージョンです。最初のdfkエントリと残りのコマンドラインが続きます。

一致しないコマンドの場合は、dfk-NNNN失敗してシミュレートされたbashエラーメッセージをstderrに印刷して127を返します。 (これは、command_not_found_handleが存在しないようなデフォルトの動作と一致します。)

サンプルセッション(実際のdfkpプログラムがないため、エコーデバッグがインストールされています):

$ dfk-1234
dfkp DFK-1234
$ dfk-18875 cat file.txt
dfkp DFK-18875 cat file.txt
$ some-other-command
bash: some-other-command: command not found
$ dfk-1
dfkp DFK-1
$ dfk-12345
dfkp DFK-12345

関連情報