次の方法は?
コマンドが次の場合
git show .....
その後実行
git show ..... | bat -l rs
私は、| bat -l rs
実行する前にコマンドの最後に追加することを意味します。
答え1
#!/bin/bash
case "$1" in
show) git "$@" | bat -l rs ;;
*) git "$@" ;;
esac
次に、このスクリプトのエイリアスをgit
。git show
\git
または、シェル関数を定義し、を使用してcommand
シェルrcファイルに追加します(bash
-syntax)。
git() {
case "$1" in
show) command git "$@" | bat -l rs ;;
*) command git "$@" ;;
esac
}
答え2
基本コマンドをオーバーライドすると、スクリプトなどに大きなgit
ダメージを与える可能性があります。これは、gitエイリアスが既存のコマンドを隠すのと同じ理由です。静かに無視される。
ただし、スクリプトを次のように定義すると、新しいgitサブコマンド名を指定すると、git-something
gitは自動的に選択します。たとえば、次の内容を含むgit-myshow
実行可能ファイルをどこかに作成します。PATH
#!/bin/sh
git show "$@" | bat -l rs
git myshow <any show arguments>
サブコマンドの名前はgit show <any show arguments> | bat -l rs
スクリプト名(git-showit
==git showit
など)によって異なります。したがって、既存のサブコマンドと異なる限り、希望の名前を選択できます。
答え3
Gitサブコマンド用のさまざまなポケットベル
Gitを使用するように設定できます。他のサブコマンドは異なるポケットベルを使用します。。特別に別のGitコマンドを使用したいが、使用したくない場合bat -l rs
:git show
git config pager.show 'bat -l rs'
または、等しく次のように入力します~/.gitconfig
。
[pager]
show = bat -l rs
環境変数を設定すると、GIT_PAGER
すべてのGitサブコマンドに適用されます。
新しいGitサブコマンドの定義
Git自体には別名システムがあります。組み込みコマンドをオーバーライドすることはできませんが、直接定義することはできます。たとえば、これをmakeに入れると~/.gitconfig
Batを通過することを除いて同じですgit sb
。git show
[alias]
sb = ! "f () { git show \"$@\" | bat -l rs; }; f"
git sb
失敗してもgit show
ゼロが返されることに注意してください。これを防ぐには、bashやzshなどの他のシェルを使用する必要があります。
[alias]
sb = ! "zsh -c 'setopt pipe_fail; f () { git show \"$@\" | bat -l rs; }; f'"
シェルからのコマンドの解析
これはGitの組み込み機能と比較して特に便利ではありませんが、これは可能です。呼び出される関数を定義し、その引数をgit
解析するようにします。これは非常に柔軟ですが、最初のステップはGitコマンドラインを解析することです。最初のものかどうかを確認するのは簡単です。ディスカッションはいshow
、しかし最初の項目を確認するのは難しいです。オプションではない引数はいshow
。形式がgit --help
あまり変更されないと仮定し、これを実行する関数は次のとおりです。
git () {
emulate -L zsh
setopt pipe_fail
local -A options_with_argument
options_with_argument=()
help="${$(command git --help)%%$'\n\n'*}"
while [[ $help =~ \\[(-[A-Za-z0-9]\ \<|--[-A-Za-z0-9]+=) ]]; do
local option=${${MATCH%%[= ]*}#'['}
options_with_argument[$option]=1
help=${help:$MEND}
done
local i=1
while [[ $@[$i] = -* ]]; do
if [[ -v options_with_argument[$@[$i]] ]]; then ((++i)); fi
((++i))
done
case $@[$i] in
show) command git "$@" | bat -r ls;;
*) command git "$@";;
esac
}
答え4
おそらくこれを行うためにシェル関数を書くことができます。
git-show() {
git show $1 | bat -l rs
}
これをシェル設定に追加して実行するとgit-show
(代わりにgit show
)目的の出力を取得できます。