
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-command
。accept-line
答え2
これはbash 4で可能ですが、以下より効率的ではありません。zshから。コマンドラインが空であることをテストするには、関数を定義する必要がありますREADLINE_LINE
。この機能を使用すると、コマンドが自動的に実行されるようにスケジュールするよりも、空行に必要なコマンドを挿入する方が簡単です。この関数を実行すると、デフォルトのReturnマッピングにバインドされたキーシーケンスが挿入されます。Ctrl+ はJ一般に同義語です。テストされていないコード。
insert_default_command_if_empty () {
if [[ -z $READLINE_LINE ]]; then READLINE_LINE='ls -l'; fi
}
bind '"\e[z1~": insert_default_command_if_empty'
bind '"\C-m": "\e[z1~\C-j"'