コマンド用の擬似シェルの作成

コマンド用の擬似シェルの作成

これはある程度率直であるべきだと思います...

デフォルトでは、一部のコマンドでは、そのコマンドのすべての引数の範囲を指定する他のコマンドを呼び出すことができるようにしたいです。だから...

git commit -am "test"

なります...

./shell_comand git
>commit -am "test"
>status

その場合、オートコンプリートなどの機能は当然動作しません。しかし、そうでない場合、どの程度は可能ではないかと思います。どうなるかわかりません...

答え1

私はこれがそれ自体で可能でなければならないと思いますgitが、私はgitの専門家ではないので、シェル関数でそれを使用します。sh互換性(たとえば)では、バイナリの代わりに呼び出される関数をbash簡単に作成できます(不要な再帰を防ぐために、関数の内部またはBASHでバイナリへのフルパスを使用するように注意してください)。gitgitcommand git

function git () {
    case "$1" in
    "commit")
        # do your stuff
        /path/to/git ...
        ;;
     *)
        # call git binary with the same arguments
        /path/to/git "$@"
        ;;
}

コマンドエイリアス()のみを使用することもできますが、alias関数を使用するとより多くの柔軟性が得られます。

完了については、シェルの完了機能を確認してください(マンページでbash参照してくださいcomplete)。確実に動作するようにすることができ、複雑すぎる必要もありません。

答え2

1つの方法は、各gitコマンドのエイリアスを定義することです。通常のシェルコマンドを引き続き実行できます。必要でない場合は、PATH存在しないディレクトリに設定します。 gitコマンドの代わりにシェルコマンドを実行するには、コマンドの前にバックスラッシュを追加します(\rm fooファイルの削除など)。

git_commands=$(COLUMNS=2 git --help --all | sed -n -e '1,/^----/d' -e '1,/^$/p')
for c in $git_commands; do
  alias "$c=git $c"
done

zshでは、オプションが設定されている場合はこれを行うこともできますcomplete_aliases。バッシュを知らない。

関連情報