执行脚本与' bash cd.sh'之间的区别和来源cd.sh'?

时间:2015-09-06 23:43:56

标签: linux

说明使用bash cd.shsource cd.sh

执行脚本之间的区别

cd.sh包含:

#!/bin/sh
cd /tmp

2 个答案:

答案 0 :(得分:0)

bash在子shell中执行脚本,当source执行当前shell中的脚本时,该shell无法修改调用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:~$ 

答案 1 :(得分:0)

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

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

#!/bin/bash
VALUE=1
cd /tmp

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

bash script.sh
echo $VALUE

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

source script.sh
echo $VALUE

如果你有这个脚本(在这个例子中名为script.py):

#!/usr/bin/env python
print 'Hello, world"

这会产生WEIRD bash错误(因为它试图将其解释为bash脚本):

source shell.py

这也会*给出一个WEIRD bash错误(因为它试图将其解释为bash脚本):

bash shell.py

这将打印Hello, world

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