zsh でエイリアス付きの sudo を使用するにはどうすればいいですか?

zsh でエイリアス付きの sudo を使用するにはどうすればいいですか?

私の に次の 2 つがあるとします.zshrc:

alias sudo='nocorrect sudo'
alias boot27='grub-reboot 4 && reboot'

boot27を与えますboot27: command not found。エイリアスを'nocorrect sudo 'または だけに変更すると'sudo '動作しますが、 のような他のものはmkdirを与えますnocorrect: command not found

答え1

明確にするために、実行してsudo boot27取得するのは、エイリアスであるboot27: command not foundため、bashはエイリアスのスキャンを停止し、エイリアスとして認識しないためです。sudoboot27こここれに対処する 1 つの方法は、エイリアス定義の最後にスペースを追加することです。

スペースを追加すると bash が認識できるようになりますboot27が、問題は、ルート アカウントが zsh を使用するように設定されていないため、sudo代わりに bash シェルが起動することnocorrectです。これはzshbash何なのかわからないため、エラーが発生します。

これを修正する最も簡単な方法は、root のシェルを次のように設定することです/bin/zsh

sudo chsh

次に、スペースを使用してエイリアスを設定します。

alias sudo='nocorrect sudo '

ただし、エイリアスboot27には別の問題があります。 として実行するとsudo boot27、シェルはエイリアスを読み取り、次のように展開します。

sudo grub-reboot 4 && reboot

つまり、ルートとして実行されますgrub-rebootが、通常のユーザーとして実行されますreboot。エイリアスを変更するか、

alias boot27='grub-reboot 4 && sudo reboot'

として実行するsudo boot27か、エイリアスを次のように変更します。

alias boot27='sudo grub-reboot 4 && sudo reboot'

sudoを使わずに、 だけを実行しますboot27

関連情報