コマンド
alias
コマンドの別名 (エイリアス) を設定する。シェルの内部コマンド。
最終更新 2019-01-13
UNIX/Linux の alias コマンドを使うと、あるコマンドを別のコマンド名で登録して、長いコマンド名の別名・短縮形を作ることができる。引数を処理することもできる。
alias コマンドは csh・tcsh や、sh・bash などのシェルの内部コマンドである。*BSD で主に使用されている csh・tcsh と、Linux で使用されている bash では書き方が異なるので、注意して読んでほしい。
CentOS + bash の場合、以下のようになった。
% alias
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
FreeBSD + tcsh の場合、以下のようになった。
% alias
h (history 25)
j (jobs -l)
● alias の設定 - csh・tcsh の場合
csh・tcsh の場合は以下のように設定する。
% alias ls "ls -lFA"
% alias du "du -k"
% alias memo "emacs ~/memo.txt"
% alias f "find / -name '\!*' -print"
● alias の一時的な無効化
csh・tcsh・sh・bash とも、コマンドの前に "\" を付けることで、一時的にエイリアスを解除できる。
% alias ls "ls -lFA" (csh・tcsh の場合)
% alias ls="ls -lFA" (sh・bash の場合)
% ls (ls -lFA と同じ)
% \ls (alias が無効。普通の ls と同じ)
また、/bin/ls などとフルパスで書くことでエイリアス設定を回避できる。
% /bin/ls (alias が無効。普通の ls と同じ)
% ls (ls -lFA と同じ)
● tcsh の引数処理
tcsh では 以下のように引数を渡すことができる。これは引数全体を find に渡す例。
% alias em "emacs \!*"
% em a.txt b.txt
→ emacs a.txt b.txt と同じ
続いて、1個目の引数・2個目の引数、と指定した場合。
% alias fx "find \!:1 -type f | xargs grep \!:2 /dev/null"
% fx . abc
→ find . -type f | xargs grep abc /dev/null と同じ
emacs でファイル myfile.txt を開き、指定文字列で検索した状態にする grepemacs。
% alias grepemacs emacs ~/myfile.txt --execute '\(search-forward-regexp\ \"^\!*\"\)'
% grepemacs hoge
→ myfile.txt を開き、正規表現 ^hoge で検索した状態にする
bash の alias での引数処理はどうやってもできないので、function で関数を作ろう。
● bash の拡張機能
bash の場合、alias で設定した文字列の末尾にスペースを入れておくと、次の引数も alias 展開される。大変わかりづらいが、要はこういうことだ。
% alias MYCMD="cal"
% alias sudo="sudo -E"
→ 末尾に空白をいれない場合は…
% sudo MYCMD
→ cal に展開されない
% alias sudo="sudo -E "
→ 末尾に空白をいれておくと…
% sudo MYCMD
→ MYCMD が cal に展開される
sudo や nice コマンドのように、第2引数にコマンド名を渡すものに設定すると便利かもしれない。
● 注意: alias はシェルスクリプト内では使えない
一般的に、alias はシェルスクリプト内や crontab 内では使えない。なぜならば、ある環境の ~/.cshrc や ~/.bashrc などで
などと alias 設定していたとして、もしシェルスクリプト実行時に alias が有効になる場合、/bin や /usr/bin にあるシェルスクリプトも上記の alias 設定が効いてしまうため、ls を実行するつもりが ls -lFA を実行してしまい、誤動作につながるためである。
csh や tcsh では、
と -f オプションを付けることで .cshrc などの読み込みが抑止され、結果的に alias が未設定の状態でシェルスクリプトが動くことになる。alias の機能が無効になっているわけではないので、スクリプト内で
#!/bin/csh -f
alias ls "ls -lFA"
ls
とすれば、alias は機能する。
bash では、非インタラクティブで起動した場合は alias の展開が無効化される。
#!/bin/bash
alias ls="ls -lFA"
ls
とすると、ls -lFA ではなく、ls が実行される。下記のように expand_aliases を有効にすることで、alias 展開が有効化され、ls -lFA が実行されることになる。
#!/bin/bash
shopt -s expand_aliases
alias ls="ls -lFA"
ls
しかしながら、シェルスクリプト内で alias を使うことは、普通は行わないものであることには留意いただきたい。
● 設定ファイル
毎回 alias を手で打つのはめんどくさいので、普通 alias の設定は、~/.cshrc や ~/.profile などに記述しておく。こうすることで、ログインすると自動的に alias が有効になる。
読み方
alias
(Cシェルコマンド) [えいりあす]
よく [ありえす] [あらいあす] とか読む人がいるがそれは間違い。 [えいりあす] が正しい。/etc/aliases は [えいりあしず]。[ありゃーせず] と発音するのは、きっと変だと思われる。