以./script.sh和。脚本运行脚本有什么区别。 ./script.sh

时间:2011-03-18 17:42:57

标签: bash

  

可能重复:
  Difference between launching a script with ./script.sh and . ./script.sh

以./script.sh和。脚本运行脚本有什么区别。 ./script.sh

4 个答案:

答案 0 :(得分:4)

源代码(. ./script.sh)脚本在同一个shell中运行。这意味着,如果它发出exit,则shell退出,如果它设置了环境变量,则shell会受到影响等。通常,您希望在隔离的子进程(./script.sh)中运行脚本。

答案 1 :(得分:3)

内置命令.使脚本在当前进程中运行,而不是在子进程中运行。使用.允许您的脚本更改当前进程的环境。例如:

$ echo $FOO

$ cat script.sh
#!/bin/bash export FOO="this is foo" 
$ ./script.sh 
$ echo $FOO

$ . ./script.sh 
$ echo $FOO 
this is foo

注意在第二种情况下,如何在当前进程中创建环境变量FOO。

以下是处理.命令的bash手册页部分的链接:

http://www.gnu.org/software/bash/manual/bashref.html#index-g_t_002e-108

答案 2 :(得分:1)

./script.sh运行脚本。生成一个新的子shell,并在其中运行脚本。脚本对环境所做的任何更改都将是子shell的本地更改。一旦子shell退出,你就不会看到它在父shell中所做的更改。

. ./script.sh来源于在当前shell中运行的脚本,因此脚本退出后脚本所做的任何环境更改都将保留。

答案 3 :(得分:1)

这就是让它变得有趣的原因:

$ cat script.sh
export HELLO=SIRE
$ ./script.sh
$ set | grep HELLO
$ . ./script.sh
$ set | grep HELLO
HELLO=SIRE

如您所见,添加“。”使脚本在当前shell的上下文中运行,而不是作为单独的进程运行,并影响当前进程的环境以及当前进程附带的所有其他内容。

如果您执行以下操作,这可能会非常有趣:

alias go=". /home/x/bin/navigate_to_location"

然后就这样做:

go sources
go builddir
go games

并且当前环境受到“。”的影响。 ; - )

所以简而言之......“。”让shell值得拥有:)