大抵のディストリビューションでは、ll
コマンドは
$ alias ll='ls -alF'
という感じのエイリアスが設定されているけど
sudo
で実行すると以下のように「そんなコマンド見つからないよ」的なエラーが出て動かない。
$ sudo ll /usr
sudo: ll: コマンドが見つかりません
これはsudoersファイルで環境変数がリセットされているためだけど
そんなときは
$ alias sudo='sudo '
というエイリアスを事前に設定しておくと、sudo ll
コマンドが動くようになる↓。
$ sudo ll /usr 合計 60 drwxr-xr-x 10 root root 4096 7月 23 00:53 ./ drwxr-xr-x 24 root root 4096 12月 16 06:11 ../ drwxr-xr-x 2 root root 24576 12月 20 11:46 bin/ drwxr-xr-x 2 root root 4096 4月 24 2018 games/ drwxr-xr-x 31 root root 4096 12月 10 23:35 include/ drwxr-xr-x 69 root root 4096 12月 20 11:46 lib/ drwxr-xr-x 10 root root 4096 7月 23 00:53 local/ drwxr-xr-x 2 root root 4096 12月 20 11:46 sbin/ drwxr-xr-x 131 root root 4096 12月 20 11:46 share/ drwxr-xr-x 6 root root 4096 12月 17 06:03 src/
なぜこのエイリアスを実行すると動くようになるかというと、どうやらbashには以下のような仕様があるかららしい。
エイリアス値の最後の文字が 空白(半角スペース)の場合、エイリアスに続く次のコマンドワードもエイリアス拡張についてチェックされます。
これがどういうことかというと
そもそもエイリアスというのは「あだ名」のような機能で、「最初に指定されたコマンドにあだ名がついているか?」をチェックする機能。
ここでキモなのは、チェックするには”最初に指定されたコマンド”だけで、”2番目に指定されたコマンド”のあだ名はチェックしないという点。
だけど、エイリアスの最後に空白(半角スペース)を指定すると、「”2番目に指定されたコマンド”もあだ名かどうかチェックしろ」みたいな指示ができるらしい。
なので、sudoでもエイリアスを常時使いたい場合は、~/.bashrc
などに
$ alias sudo='sudo '
を追記しておくと良いかもしれない。
おわり
コメント