Bashシェルスクリプト内でaliasコマンドを使う方法
はじめに
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
コマンドをシェルスクリプト内で利用した場合にエラーが出た場合に参考にしていただければと思います
ディスカッション
コメント一覧
まだ、コメントがありません