4

假设我有 2 个脚本

测试1.sh

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

测试2.sh

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

如果我调用第一个脚本就可以了

$ ./test1.sh
bar

但是,如果我尝试foo在那之后打电话,它将无法正常工作。

$ foo
bash: foo: command not found
4

3 回答 3

10

当您执行时./test1.sh,会产生一个子进程。当test1.shsources时test2.sh,仅在foo()定义时修改该子流程的上下文。一旦test1.sh完成,子进程就会终止,并且您的交互式 shell 不知道foo().

于 2012-07-04T14:28:56.727 回答
3

如果你打电话source test2.sh,你会得到你想要的结果。如果您希望能够在启动新终端时调用 foo,请将其定义放在 .bashrc 或 .profile 文件中。

于 2012-07-04T14:14:42.530 回答
0

如果我 source test1.sh 它会给出所需的结果。

$ . test1.sh
bar

$ foo
bar
于 2012-07-04T14:23:27.407 回答