それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

一時的にaliasをオフ無効にする バックスラッシュ

一時的にalias をオフにしたいとき

grep や ls などを使っていて、一時的にalias をオフにしたいことないですか?

私は結構たくさんあります。 grep や ls にいっぱいオプションを付けていて普段はそれを使っているのですが、素のgrep がほしいときはある。

そんなときは back slash を入れます。

\grep . -R 

このような、エイリアスがあったとしても、素のgrep が動いてくれます。

takuya@:www-data$ alias grep
alias grep='grep -i -E -a --color=auto -n '

これを知って、安心して rm や ls までどんどん alias にしていくことが出来ました。

不必要に エイリアスが呼び出されてしまわないように バックスラッシュをつけるのが良いです。

ただし、同名の関数が定義されているときは関数が優先されます。

シェルから一時的に使うと便利。

バックスラッッシュは、エイリアスがあるために意図した動作にならないときに、対話的prompt で使うと便利です。本当に便利です。

互換性を維持する目的であれば フルパス

alias しまくってると不意に動作することがあるので、シェルスクリプトにバックスラッシュを書きたくなると思います。別環境に持っていくときに alias が発動しないようにバックスラッシュを付与したスクリプトファイルにしても構わないのですが。。。。

互換性を目的にするのであれば、バックスラッシュよりもフルパスが好ましいと思います。

## これはalias発動するのでポータビリティに向いてない。
ls *.jpg | grep aaa| xargs identify

## これだと、alias なしで実行される。が、function grep {   ... } があればそちらが使われてしまう。
## またPATH優先順位にも左右されてしまう。
ls *.jpg | \grep aaa| xargs identify

##  フルパスで指定が無難
ls *.jpg | /bin/grep aaa| xargs identify

このように、シェルのコマンドの優先度を考えたら、ポータビリティを維持する目的でではバックスラッシュは向いていません。

2019-08-23

互換性についての記述を追加。