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






ディスカッション
コメント一覧
まだ、コメントがありません