LoginSignup
2
4

More than 5 years have passed since last update.

sudoしたあともfunctionを引き継がせる

Last updated at Posted at 2018-01-20

どうも。かちおです。
自分は、よくfanctionを使って「vi(){vim $@}」みたいなことをしています。

ちなみに、aliasを使わないのは、aliasだと保管の際に不具合が起きるからです。

そして、aliasの場合はsudoでも引き継がれますが、functionの場合は引き継がれません。
つまり、alias vi='vim 'をすると、sudo vi hogeをした際には、sudo vim hogeになりますが、vi(){vim $@}した場合には、sudo vi hogesudo vi hogeとして実行されてしまいます。
これではsudoしたときに関数が引き継げません。

ということで以下のfunctionとaliasを.bashrcなどに追加します。

sdo() sudo zsh -c "$functions[$1]" "$@"
alias sudo="sdo"

まず、sudoのかわりにsdoというfunction(コマンド)を作成し、$functionという、シェルに登録された関数がすべて保管されている便利な変数を実行します。そして本来のコマンドを実行します。
次に、aliasでsudoを売ったときにsdoが実行されるようにします。

本体は、sudoというfunctionを作成したかったのですが、そうやらそれは怒られてしまうようなので、このような形になりました。

参考: https://unix.stackexchange.com/questions/317687/command-not-found-when-sudoing-function-from-zshrc

2
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4