sudo するとコマンドnot found
あああ、、もう。
takuya@sakura:~$ sudo ll sudo: ll: command not found
alias に頼り切ってると、こういうことが頻繁に起きる
解決策
alias sudo='sudo '
コレが解決策
間違った解決策: preserve Environment
sudo -E
環境変数を渡してしまうと、意図通りの動作をしない可能性があったり、ミスを誘発するから絶対ダメ。(間違いとは言いすぎかもしれないが、過剰な環境変数の引き継ぎは意図しない動作を引き起こしてしまう)
このオプションは、現在の環境変数をすべて sudo 実行時に引き継ぐのでトラブルのもとになると思いう。
alias でうまくいく理由。
たぶんだけど、alias の展開が再帰的に行われるから 。
alias を使って再帰的な展開をつかってbashに解釈させるってことですね。
sudo のかわりに _sudo として考えてみる。
alias ll='ls -l' alias _sudo='sudo ' _sudo ll
こう書いたとき、alias が展開されるとき、_sudo ll は sudo ls -l として順番にalias を展開済みにしてから プロセスが起動される。
# alias が alias を展開して $ _sudo ll → sudo ll # ここで更に展開 → sudo ls -l $ sudo ls -l # コレが実行される。
再帰的なalias展開を使うという、シンプルで盲点な解決策があるってことに気づかなかった私を殴りたい。
参考資料
追記 2018/10/28
はてなブックマーク - tarumeのブックマーク / 2018年10月17日
よくわからない説明されてるけど、公式読むと→ http://www.gnu.org/software/bash/manual/bashref.html#Aliases >If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion.
再帰的に展開するっていう説明じゃよくわからないですか。すいません。書き方一部変更します。