6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

bashのaliasをシェルスクリプト内では意識せずに使う方法

Last updated at Posted at 2022-02-08

こちらの記事の結論で書いてある通り、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).
6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?