こちらの記事の結論で書いてある通り、Bashのaliasをシェルスクリプト内に引き継ぐキレイな方法は見つかりませんでした。
ワークアラウンド的ですが、シェルスクリプトに修正を入れずに使える方法が見つかったので残しておきます。
シェルスクリプト内でaliasを使えない
~/.bashrc
でaliasを設定しているとします。
alias foo=date
# aliasのfooが設定されていることを確認
$ alias
alias foo='date'
$ foo
Tue Feb 8 14:31:20 UTC 2022
# aliasのfooを実行するシェルスクリプトを作成
$ cat <<EOF > a.sh
> foo
> EOF
# シェルスクリプト内ではaliasが展開されていない
$ bash a.sh
a.sh: line 1: foo: command not found
シェルスクリプト内でaliasを使う
上記の a.sh
のスクリプトファイルには変更を加えずにaliasを認識させる方法です。
~/.bashrc
のどこかに shopt -s expand_aliases
の一行を入れます。
shopt -s expand_aliases
alias foo=date
-l
オプションを入たbashで実行すると、シェルスクリプトには修正を入れないでも、aliasを展開して実行できます。
# -l オプションを入れるとaliasが実行可能
$ bash -l a.sh
Tue Feb 8 14:36:03 UTC 2022
# -l オプションを無しだとaliasが展開されていない
$ bash a.sh
a.sh: line 1: foo: command not found
もちろんshebangに書いても良いです。
a.sh
#!/bin/bash -l
foo
-l
オプションの説明は以下の通りです。ログインシェルとして扱うので展開されるみたいです。
-l Make bash act as if it had been invoked as a login shell (see INVOCATION below).