4

2つのスクリプトがあるとしましょう

test1.sh

#!/bin/sh
. ./test2.sh
foo

test2.sh

#!/bin/sh
foo(){
  echo "bar"
}

最初のスクリプトを呼び出すと問題ありません

$ ./test1.sh
bar

しかし、その後電話をかけようとするfooとうまくいきません。

$ foo
bash: foo: command not found
4

3 に答える 3

10

を実行する./test1.shと、サブプロセスが生成されます。test1.shソースの場合、が定義さtest2.shれている場合、そのサブプロセスのコンテキストのみが変更されます。foo()完了するとすぐtest1.shに、サブプロセスは終了し、インタラクティブシェルはの知識を持ちませんfoo()

于 2012-07-04T14:28:56.727 に答える
3

電話source test2.shをかけると、希望する結果が得られます。新しいターミナルを起動するたびにfooを呼び出せるようにする場合は、その定義を.bashrcまたは.profileファイルに配置します。

于 2012-07-04T14:14:42.530 に答える
0

test1.shをソースすると、目的の結果が得られます。

$ . test1.sh
bar

$ foo
bar
于 2012-07-04T14:23:27.407 に答える