UNIX/Linuxの部屋 コマンド:alias

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




コマンド alias コマンドの別名 (エイリアス) を設定する。シェルの内部コマンド。 このエントリーをはてなブックマークに追加

最終更新


UNIX/Linux の alias コマンドを使うと、あるコマンドを別のコマンド名で登録して、長いコマンド名の別名・短縮形を作ることができる。引数を処理することもできる。


alias コマンドは csh・tcsh や、sh・bash などのシェルの内部コマンドである。*BSD で主に使用されている csh・tcsh と、Linux で使用されている bash では書き方が異なるので、注意して読んでほしい。

現在設定されている alias を一覧表示する
alias コマンドを引数なしで実行すると、現在設定されているエイリアスの一覧を表示する。

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 の設定 - sh・bash の場合
sh・bash の場合は、「=」で結ぶ。
% alias ls="ls -lFA"
% alias du="du -k"

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 と同じ)

エイリアスの削除 (恒久的な無効化)
エイリアスを削除 (解除) するには unalias を使う。

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 ls="ls -lFA"
などと alias 設定していたとして、もしシェルスクリプト実行時に alias が有効になる場合、/bin や /usr/bin にあるシェルスクリプトも上記の alias 設定が効いてしまうため、ls を実行するつもりが ls -lFA を実行してしまい、誤動作につながるためである。

csh や tcsh では、
#!/bin/csh -f
と -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 は [えいりあしず]。[ありゃーせず] と発音するのは、きっと変だと思われる。