MacOSでrootのbashrcとzshrcにaliasを設定したい。
ユーザーのbashrcおよびzshrcにはそれぞれ~/.bashrc ~/.zshrcで設定できます。
alias la='ls -a' など
しかしsudo la としても
command not foundになります。
ルート権限でも同様にエイリアスを効かせたいのですが、どこで設定すれば良いのでしょうか
ちなみに
/etc/bashrc
/var/root/.profile
/private/var/root/.profile
にalias la='ls -a'を設定しても反映されませんでした
環境
MacOS1.6
ターミナルiTerm2です
よろしくお願いします。
「alias sudo='sudo '」を設定する、というのが常套句のようです。
なんで末尾にスペース入れるだけで sudo で alias を有効にできるわけ?
手元に Mac OS は無いので Linux 上で試しましたが、sudo を実行するユーザの環境で設定されている alias は、この設定で実行できました。ただし、root ユーザの bashrc 等に設定されている alias を適用する方法は見つかってません。
例えば、/etc/bashrc に書いたものであれば、全てのユーザに同じ alias 設定が入るので、これであれば、前述の sudo の alias を書く、という方法で行けますが、「いや、sudo で呼び出した時だけ、この alias を有効にしたいんだ」となると、この方法は使えません。
追記:
root だけの alias を呼び出す方法が分かりました。root ユーザの .bashrc や .profile (Mac OS だと /var/root の下かな?)に
shopt -s expand_aliases
という行を加えます。こうした上で
sudo -i la
と「-i」オプション付きで呼び出します。この場合は前述の sudo に対する alias は必要ありません。
この文脈ではMacローカルルールは関係ないです。sudo の行内でaliasの la を動かすことは、たぶんあなたが想像している形では不可能です。
- sudo はshellを経由せずにコマンドを起動するのが通常動作なので、ユーザ変更後のshellの出番はありません。sudo でshellを起動したければ sudo -s を使うか、shellのパスを明示的に指定して起動する必要があります。
- ただし、sudo -s hogehoge で起動されるshellは非loginで非interactiveなshellなので、sudo -s la はやっぱり動きません。
- POSIX shell の一般論として、profile ファイルを読み込むのは、login shell だけです。
- bash等ほぼ全てのシェルにおいて、rc ファイルを読み込むのは、interactive shell だけです。
- sudo -i la とすれば、ユーザ変更後(root)のshellが login shell として起動されるので、profile が読み込まれ、結果一応動くように見えるはずです。
- が、この場合rootが最初から普通にログインしたのと同じ扱いになるので、カレントはrootのホームに移動していますし、環境変数も原則として一切引き継げません。
- そもそも sudo のポリシーで、rootでのshell起動が許可されていなければ、上記の全ては動きません。というより、shellを明け渡していいのなら sudo でなくとも su で良いのです。
どちらかと言えば sudo la をしたくなっている時点で、その運用方針が何か根本的に間違っていると考えるべきではないかと。rootのshellを制限しないポリシーなのであれば、無理にsudoの行内で済まそうとせず、普通に sudo -i (あるいは su -) で interactive shell に降りてから la でも何でもする方が健全に思えます。
(最後の一文追加と字句修正のみ.)