![zsh でエイリアス付きの sudo を使用するにはどうすればいいですか?](https://rvso.com/image/1366198/zsh%20%E3%81%A7%E3%82%A8%E3%82%A4%E3%83%AA%E3%82%A2%E3%82%B9%E4%BB%98%E3%81%8D%E3%81%AE%20sudo%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%81%84%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
私の に次の 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はエイリアスのスキャンを停止し、エイリアスとして認識しないためです。sudo
boot27
こここれに対処する 1 つの方法は、エイリアス定義の最後にスペースを追加することです。
スペースを追加すると bash が認識できるようになりますboot27
が、問題は、ルート アカウントが zsh を使用するように設定されていないため、sudo
代わりに bash シェルが起動することnocorrect
です。これはzsh
、bash
何なのかわからないため、エラーが発生します。
これを修正する最も簡単な方法は、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
。