まひろ量子のハックログ

プログラミングや機械学習などの知識を記録・共有します

bashrcに定義した関数をシェルスクリプトの中で呼ぶ

bashrcで以下のように関数を定義することができる。

myfunction() {
  echo "Hello"
}

定義した関数はコマンドとして使えるようになる。

$ myfunction

Hello

この関数を内部で使用するスクリプトを書いてみた。

#!/bin/bash
myfunction

このスクリプトを実行すれば、定義した関数も実行されるはずだ。つまり、以下のような動作を期待しているわけだ。

$ ./hoge.sh

Hello

しかし、実際はこうなる。

$ ./hoge.sh
./hoge.sh: 行 2: myfunction: コマンドが見つかりません

それもそのはず。定義したmyfunctionは、他の関数で使えるようにエクスポートされていないのだ。

bashrcに以下のようにエクスポート文を書けばうまくいく。

myfunction() {
  echo "Hello"
}
export -f myfunction

試しにスクリプトを実行してみよう。

$ ./hoge.sh
Hello

うまくいった。

Kozuko Mahiro's Hacklog ―― Copyright © 2018 Mahiro Kazuko