alias / unalias
| 対応: | 全Linux | |
|---|---|---|
| macOS(2001 Cheetah) | ||
| Bash 1.0(1989) |
『alias』はコマンドに別名(エイリアス)を設定するコマンドです。長いコマンドや頻繁に使うオプションを短い名前で呼び出せるようになります。『unalias』で設定を解除できます。設定は現在のシェルセッション中のみ有効で、永続化するには .bashrc や .zshrc に記述する必要があります。
構文
エイリアスを設定します。= の前後にスペースを入れてはいけません。
alias エイリアス名='コマンド'
設定済みのエイリアスをすべて表示します。
alias
特定のエイリアスの定義を確認します。
alias エイリアス名
エイリアスを解除します。
unalias エイリアス名
すべてのエイリアスを一括で解除します。
unalias -a
エイリアス一覧(よく使う例)
| エイリアス定義 | 概要 |
|---|---|
| alias ll='ls -la' | ファイル一覧を詳細表示(隠しファイル含む)。 |
| alias la='ls -A' | 『.』と『..』を除く隠しファイルも表示。 |
| alias ..='cd ..' | 1つ上のディレクトリに移動。 |
| alias ...='cd ../..' | 2つ上のディレクトリに移動。 |
| alias grep='grep --color=auto' | grep の検索結果に色をつける。 |
| alias rm='rm -i' | 削除前に確認を求める(誤削除防止)。 |
| alias cp='cp -i' | 上書きコピー前に確認を求める。 |
| alias mv='mv -i' | 上書き移動前に確認を求める。 |
| alias h='history' | コマンド履歴を表示。 |
| alias c='clear' | ターミナルをクリア。 |
サンプルコード
エイリアスを設定して使う基本的な例です。『ls -la』に『ll』という短い名前を付けます。
alias ll='ls -la' ll nerv_report.txt -rw-r--r-- 1 rei nerv 1024 Apr 9 21:00 nerv_report.txt
引数なしで『alias』を実行すると、現在設定されているエイリアスが一覧表示されます。
alias alias ll='ls -la' alias grep='grep --color=auto' alias rm='rm -i'
特定のエイリアス名を引数に渡すと、その定義だけを確認できます。
alias ll alias ll='ls -la'
エイリアスを解除するには『unalias』を使います。解除後はエイリアスが使えなくなります。
unalias ll ll nerv_report.txt -bash: ll: command not found
複数のエイリアスをまとめて設定する例です。NERVの作業用に便利なエイリアスを定義します。
alias report='cat /var/log/nerv/angel_detection.log' alias backup='cp eva_unit01.log eva_unit01.log.bak' alias status='ps aux | grep eva' alias nerv_home='cd /home/rei/nerv' alias ll='ls -la --color=auto'
.bashrc への永続化
# ~/.bashrc に追記するエイリアス定義例 # ファイル操作 alias ll='ls -la --color=auto' alias la='ls -A' alias ..='cd ..' alias ...='cd ../..' # 安全策(誤操作防止) alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' # NERV作業用 alias report='cat /var/log/nerv/angel_detection.log' alias eva_log='tail -f /var/log/nerv/eva_unit01.log' alias nerv_home='cd /home/rei/nerv'
設定を保存したら、現在のセッションに反映するために『source』コマンドを実行します。
source ~/.bashrc
エイリアスは引数を受け取れないため、引数が必要な処理は関数で定義します。
# alias は引数を扱えない alias greet='echo "Hello, $1"' # $1 は展開されない
『$1』は alias 定義時に固定文字列として展開されるため、引数として機能しません。呼び出し時に値を渡すことはできません。
#!/bin/bash
nerv_report() {
local target="$1"
echo "=== NERV Report: $target ==="
cat "/var/log/nerv/${target}.log"
}
nerv_report "angel_detection"
nerv_report "eva_unit01"
概要
エイリアスは現在のシェルプロセスにのみ有効です。サブシェル(スクリプト内など)ではデフォルトで引き継がれません。スクリプト内でエイリアスを使いたい場合は shopt -s expand_aliases(bash)を有効にする必要があります。ただし、スクリプト内での使用は一般的ではなく、関数を使う方が移植性・可読性ともに高いです。
エイリアス名に既存のコマンド名(ls, grep など)を使うことで、元のコマンドにオプションを自動付与できます。元のコマンドを呼び出したい場合は、名前の前にバックスラッシュ(\ls)を付けるか、command ls とするとエイリアスを無視して実行できます。
zsh では alias -g(グローバルエイリアス)が使え、コマンドのどの位置にでも展開されるエイリアスを定義できます。例えば alias -g L='| less' と定義すると、cat file L のように書けます。bash にはこの機能はありません。
よくあるミス
よくあるミス1: = の前後にスペースを入れてしまう
alias の定義で = の前後にスペースを入れるとエラーになります。
alias ll = 'ls -la' alias ll='ls -la' -bash: alias: ll: not found -bash: alias: =: not found -bash: alias: ls -la: not found
シェルは『ll』、『=』、『'ls -la'』を別々の引数として解釈します。スペースなしで書く必要があります。
alias ll='ls -la'
よくあるミス2: シングルクォートとダブルクォートで展開タイミングが変わる
エイリアス定義時にシングルクォートを使うと、変数の展開はエイリアスを実行したときに行われます。ダブルクォートを使うと、エイリアスを定義したときに展開されます。
export NERV_DIR="/home/rei/nerv" alias go_nerv_single='cd $NERV_DIR' alias go_nerv_double="cd $NERV_DIR" export NERV_DIR="/home/shinji/nerv" go_nerv_single pwd /home/shinji/nerv
シングルクォートの場合、$NERV_DIR はエイリアス実行時に評価されるため、変数を後から変更しても反映されます。
go_nerv_double pwd /home/rei/nerv
ダブルクォートの場合、$NERV_DIR は定義時(/home/rei/nerv)の値で固定されます。変数を変えても古い値が使われます。現在の変数値を使いたい場合はシングルクォート、定義時の値を固定したい場合はダブルクォートを使います。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。