別名への他の入力なしでマッピングが返されます。

別名への他の入力なしでマッピングが返されます。

Return他の入力なしでシェルでエイリアスコマンドを実行したいと思います。 BashやZshでこれは可能ですか?

つまり、空のコマンドラインを入力すると、特定のコマンドを実行したいと思います。他のコマンドラインは影響を受けてはいけません。

$ ls <Return>
→ run ls
$ <Return>
→ run my aliased command

ベストアンサー1

どういう意味なのかわかりませんが、次のようになりますzsh

accept-line() {: "${BUFFER:="my-aliased-command"}"; zle ".$WIDGET"}
zle -N accept-line

Enter空のバッファを押すと実行されますmy-aliased-command

これはaccept-lineウィジェットを関数としてオーバーライドすることです。zle(zsh Line Editor)ウィジェットには、$BUFFERこれまでのコマンドラインの内容が含まれています。そのため、ここではmy-aliased-command組み込みウィジェットaccept-line()を実行する前にそれを空白にするように設定しました.accept-line

my-aliased-commandこれはコマンド履歴に追加されることを意味します。

これを望まない場合、他のアプローチは次のとおりです。

accept-line() {
  if [[ -z $BUFFER ]]; then
    zle -I
    my-aliased-command
  else
    zle ".$WIDGET"
  fi
}
zle -N accept-line

空の場合は$BUFFERプロンプトを無効にし(コマンドに出力がない場合はこれを行う必要はありません)、そうでない場合は組み込み関数を実行しますmy-aliased-commandaccept-line

おすすめ記事