说明使用bash cd.sh
和source cd.sh
cd.sh包含:
#!/bin/sh
cd /tmp
答案 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