Bashシェルスクリプト内でaliasコマンドを使う方法

Bash, CentOS, Linux

はじめに

Bashシェルスクリプト内で alias コマンドを使ってエイリアス設定しようとしてもデフォルトのままでは設定できません。

設定する方法について紹介します。

検証環境

$ uname -moi
x86_64 MacBookPro11,4 Darwin

$ bash -version | head -n 1
GNU bash, バージョン 5.0.16(1)-release (x86_64-apple-darwin18.7.0)

シェルスクリプト内でaliasコマンドを使ってみる

ls -l コマンドをかんたんに扱うための ll というエイリアスを作成し、実行するスクリプトを用意してみます。

# ファイルを作成
$ echo <<EOF > test.sh
#!/usr/bin/env bash

alias ll='ls -l'

ll /tmp/
EOF

# 実行権限を付与
$ chmod 700 test.sh

これを実行してみます。

$ ./test.sh
./test.sh: 行 5: ll: コマンドが見つかりません

alias コマンドで用意した ll というエイリアスコマンドが認識されていない事がわかります。

Bashのドキュメントを確認してみる

Bashのドキュメントを引くと理由がわかります。

$ man bash

Aliases are not expanded when the shell is not interactive, unless the
expand_aliases shell option is set using shopt (see the description of shopt under
SHELL BUILTIN COMMANDS below).

翻訳すると以下の通りです。

シェルが非対話の場合、shopt を使用して expand_aliases シェルオプションを設定しない限り、エイリアスは展開されません(以下のSHELL BUILTINコマンドの下のshoptの説明を参照)。

デフォルトでは、非インタラクティブなシェル、つまりシェルスクリプトでは alias コマンドが使えません。

シェルスクリプト内でaliasコマンドを使えるようにするには

シェルスクリプト内でexpand_aliasesオプションを設定してやります。

#!/usr/bin/env bash

shopt -s expand_aliases

alias ll='ls -l'

ll /tmp/

実行してみます。

$ ./test.sh
total 20
drwxrwxr-x 3 genzouw   wheel   96  3 16 08:46 work

ll エイリアスコマンドが実行できるようになりました。

ひとこと

function を使って関数定義でも同じような事ができますので、必要になることは少ないと思います。
aliasコマンドをシェルスクリプト内で利用した場合にエラーが出た場合に参考にしていただければと思います

Bash, CentOS, Linux