人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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です
よろしくお願いします。

●質問者: timestep
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● JULY
●50ポイント ベストアンサー

「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 は必要ありません。


timestepさんのコメント
alias sudo='sudo 'で解決できました。 ありがとうございます。

2 ● ghost
●50ポイント

この文脈ではMacローカルルールは関係ないです。sudo の行内でaliasの la を動かすことは、たぶんあなたが想像している形では不可能です。

  1. sudo はshellを経由せずにコマンドを起動するのが通常動作なので、ユーザ変更後のshellの出番はありません。sudo でshellを起動したければ sudo -s を使うか、shellのパスを明示的に指定して起動する必要があります。
  2. ただし、sudo -s hogehoge で起動されるshellは非loginで非interactiveなshellなので、sudo -s la はやっぱり動きません。
    • POSIX shell の一般論として、profile ファイルを読み込むのは、login shell だけです。
    • bash等ほぼ全てのシェルにおいて、rc ファイルを読み込むのは、interactive shell だけです。
  3. sudo -i la とすれば、ユーザ変更後(root)のshellが login shell として起動されるので、profile が読み込まれ、結果一応動くように見えるはずです。
    • が、この場合rootが最初から普通にログインしたのと同じ扱いになるので、カレントはrootのホームに移動していますし、環境変数も原則として一切引き継げません。
  4. そもそも sudo のポリシーで、rootでのshell起動が許可されていなければ、上記の全ては動きません。というより、shellを明け渡していいのなら sudo でなくとも su で良いのです。

どちらかと言えば sudo la をしたくなっている時点で、その運用方針が何か根本的に間違っていると考えるべきではないかと。rootのshellを制限しないポリシーなのであれば、無理にsudoの行内で済まそうとせず、普通に sudo -i (あるいは su -) で interactive shell に降りてから la でも何でもする方が健全に思えます。

(最後の一文追加と字句修正のみ.)


ghostさんのコメント
ああしまった、確かに非interactiveだから expand_aliases しないとalias展開されないですね結局。というわけで sudo -i で行く場合は shopt -s expand_aliases も必要です。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ