Linux / コマンド / unalias - コマンドの別名を削除

unaliasはBashの現在のシェルに登録されているエイリアスを削除する組み込みコマンドです。特定のエイリアスだけを削除することも、-aオプションで全てのエイリアスを削除することもできますが、起動ファイルに保存された定義まで自動で消すわけではありません。

エイリアスのせいで予期しないオプションが適用されたり、元のコマンドを実行しにくくなるときに便利です。 一時的な削除と永続的な削除の違いを理解することが重要です。

unaliasコマンドとは?

aliasがコマンド名と置換文字列を登録するのに対し、unaliasはその登録を現在のBashセッションから削除します。削除後に同じ名前を入力すると、Bashは関数、組み込みコマンド、またはPATHの実行ファイルなど次の候補を再度探します。

この記事はBashを基準としています。他のシェルにも同じ名前のコマンドが存在する場合がありますが、サポートされるオプションや設定ファイルは異なる場合があります。

基本的な文法

まず bash --noprofile --norc で別の対話型 Bash を開いて練習すると、普段のシェルの別名を消さずに確認できます。練習後は exit で戻ります。作成・保存の基本は alias で別名を設定する方法も参照してください。

unalias [-a] [名前 ...]

名前を1つ以上指定すると、該当するエイリアスを削除します。-aは現在のシェルの全てのエイリアスを削除します。

特定のエイリアスを削除する

alias ll='ls -alF'
unalias ll

削除前後の状態は次のように確認できます。

alias ll
unalias ll
type ll

別名を削除した後、同じ名前の関数や実行ファイルが存在する場合、その対象が選択されることがあります。単に「コマンドがなくなった」と仮定せず、type -a 名前で残った候補を確認することをおすすめします。

複数の別名を一度に削除する

unalias ll la grep

指定した名前の中に定義されていない別名がある場合、unaliasは失敗状態を返すことがあります。自動化コードで結果を使用する際は、この点に注意してください。

すべての別名を削除する

unalias -a

-aは現在のシェルのすべての別名を削除します。個人設定だけでなく、配布版が便宜や安全のために提供した別名も一緒に削除される可能性があるため、問題の原因を特定する一時的なシェルでない限り、慎重に使用してください。

削除前に一覧を確認するには次のコマンドを使います。これは表示するだけです。保存するなら、上書きしてよい自分のファイルへ alias -p > alias-backup.sh のように出力します。復元は内容を確認した自分のバックアップだけを source ./alias-backup.sh で読み込みます。バックアップを他人が書き換えられる場所に置かないでください。

alias -p

一時的削除と永久削除の違い

現在のターミナルでのみ削除

unaliasは現在のBashプロセスのエイリアステーブルのみを変更します。ターミナルを閉じて新しいシェルを起動すると、~/.bashrcのような起動ファイルにあるエイリアスが再定義されます。

新しいターミナルでも削除

エイリアスを永続的に削除するには、エイリアスを定義した設定ファイルを見つけ、その行を削除するかコメントアウトする必要があります。

grep -n "alias ll=" ~/.bashrc ~/.bash_aliases 2>/dev/null

編集前に設定ファイルをバックアップしてください。定義を削除した後は、新しいシェルで再作成されないことを確認します。現在のシェルに既に登録された別名は、その行を消して source するだけでは削除されないため、別途 unalias ll を実行します。次のコマンドは残っている設定を読み直すもので、別名の削除操作そのものではありません。ファイル内の他の命令も再実行されます。

source ~/.bashrc

システム全体の設定である/etc/bash.bashrcまたは/etc/profile.d/で定義されている場合もあります。システムファイルを変更する前に、ユーザー設定で再定義するか、必要なセッションでのみ削除する方法をまず検討してください。

削除せずに一度だけエイリアスを回避する

元のコマンドを一度だけ実行する目的なら、エイリアスを削除する必要はありません。コマンド名の前にバックスラッシュを付けるか、実行ファイルの絶対パスを使用できます。

\ls
/usr/bin/ls

バックスラッシュはその単語がエイリアスとして展開されるのを防ぎます。絶対パスはPATHの通常の検索を経ず、確認した実行ファイルを直接実行します。バックスラッシュだけでは同名の関数は避けられません。

別名、関数と変数は削除方法が異なります

対象 削除コマンド 確認方法
別名 unalias 名前 alias 名前 または type 名前
シェル関数 unset -f 名前 declare -F 名前 または type 名前
シェル変数 unset -v 名前 declare -p 名前
実行ファイル ファイル管理コマンドを使用 type -a 名前 または command -v 名前

unaliasは同じ名前の関数やファイルを削除しません。コマンドの種類を誤って判断すると、目的の対象がそのまま残る可能性があるため、まずtypeで確認してください。

スクリプトで安全に使用する

定義されている時だけ削除するには、まずaliasの終了ステータスを確認できます。

if alias ll >/dev/null 2>&1; then
  unalias ll
fi

ただし、非対話型の Bash は基本的にエイリアスの展開を行わないため、通常のスクリプトでユーザーのエイリアスを削除する必要がある状況はあまり多くありません。スクリプトは対話型シェルの個人設定に依存しないように作成する方が良いです。

よく発生する問題

unalias 後、新しいターミナルでエイリアスが再び生成されます。

~/.bashrc、~/.bash_aliases またはシステムの起動ファイルで再定義されているためです。定義されている場所を見つけて修正する必要があります。

unalias: 名前: not found エラーが発生します。

指定した名前が現在のシェルのエイリアスではない可能性が高いです。type -a 名前 で関数、組み込みコマンド、または実行ファイルかどうかを確認してください。

コマンドの動作が依然として異なるように見えます。

同じ名前のシェル関数があるか、または実行ファイルが複数のパスに存在する可能性があります。type -a 名前 ですべての候補を確認し、必要に応じて hash -r で Bash のコマンドパスキャッシュをクリアしてから再確認してください。

使用状況別の選択

状況 推奨方法
元のコマンドを一度だけ実行 \名前 または絶対パスを使用します。
現在のターミナルでエイリアスを解除 unalias 名前 を使用します。
すべてのエイリアスによる影響を一時的に除去 リストを確認した後 unalias -a を使用します。
新しいターミナルでも削除 別名が定義されたスタートアップファイルを修正します。
同じ名前の関数を削除 unset -f 名前 を使用します。

よくある質問

unalias -aを実行すれば復元できますか?

現在のシェルの別名定義を直接元に戻す機能はありません。スタートアップファイルに保存された別名はsource ~/.bashrcで再読込できますが、コマンドラインで作成した別名は再定義する必要があります。

unaliasは他のターミナルにも影響しますか?

いいえ。各ターミナルのシェルプロセスは別々の別名テーブルを持つため、現在のシェルで実行したunaliasは他のシェルに直接影響を与えません。

削除した別名と同じ名前を入力すると何が実行されますか?

Bashは残っている関数、組み込みコマンド、PATHの実行ファイルなどをコマンド探索規則に従って検索します。実際の選択結果はtype 名前で確認できます。

参考資料