Linux 使用';bash cd.sh';和';源cd.sh';?

Linux 使用';bash cd.sh';和';源cd.sh';?,linux,Linux,解释使用bash cd.sh执行脚本与source cd.sh cd.sh包含: #!/bin/sh cd /tmp bash在无法修改调用shell的环境的子shell中执行脚本,而source在当前shell中执行脚本: test.sh #!/bin/sh export MY_NAME=chucksmash echo $MY_NAME 运行test.sh: chuck@precision:~$ bash test.sh chucksmash chuck@precision:~$ echo

解释使用
bash cd.sh
执行脚本与
source cd.sh

cd.sh包含:

#!/bin/sh
cd /tmp

bash
在无法修改调用shell的环境的子shell中执行脚本,而
source
在当前shell中执行脚本:

test.sh

#!/bin/sh
export MY_NAME=chucksmash
echo $MY_NAME
运行test.sh:

chuck@precision:~$ bash test.sh
chucksmash
chuck@precision:~$ echo $MY_NAME

chuck@precision:~$ source test.sh
chucksmash
chuck@precision:~$ echo $MY_NAME
chucksmash
chuck@precision:~$ 

在bash中,看起来像
source script.sh
(或
.script.sh
)的命令在当前shell中运行脚本,,而不考虑
#

因此,如果您有一个脚本(在本例中名为
script.sh
):

这将不打印任何内容(因为
VALUE
为null),也不会更改目录(因为命令是在另一个bash实例中执行的):

这将打印
1
,并将目录更改为
/tmp

source script.sh
echo $VALUE
如果改为使用此脚本(在本例中名为
script.py
):

这将产生一个奇怪的bash错误(因为它试图将其解释为bash脚本):

这将*还*给出一个奇怪的bash错误(因为它试图将其解释为bash脚本):

这将打印
Hello,world

./shell.py # assuming the execute bit it set

一个启动一个新shell,一个使用当前shell?
source script.sh
echo $VALUE
#!/usr/bin/env python
print 'Hello, world"
source shell.py
bash shell.py
./shell.py # assuming the execute bit it set