linux source区别,linux-使用`sh`和`source`有什么区别?

当您调用$SHLVL(或其别名/bin/sh)时,会将脚本插入当前的bash进程中。 因此,您可以读取脚本设置的变量。

当您调用$SHLVL时,您将启动一个运行新会话/bin/sh的派生(子进程),该会话通常是指向bash的符号链接。在这种情况下,当子脚本设置为-时,将删除由子脚本设置的环境变量。 脚本完成。

警告:$SHLVL可能是到另一个外壳的符号链接。

一个小样本

例如,如果要通过特定方式更改当前工作目录,则无法执行

cat <myCd2Doc.sh

#!/bin/sh

cd /usr/share/doc

eof

chmod +x myCd2Doc.sh

这不会达到您的期望:

cd /tmp

pwd

/tmp

~/myCd2Doc.sh

pwd

/tmp

因为当前的工作目录是环境的一部分,因此$SHLVL将在子外壳中运行。

但:

cat >myCd2Doc.source <

# Shell source file

myCd2Doc() {

cd /usr/share/doc

}

eof

. myCd2Doc.source

cd /tmp

pwd

/tmp

myCd2Doc

pwd

/usr/share/doc

(我写了一个$SHLVL函数的小样本。)

执行级别$SHLVL

cd /tmp

printf %b '\43\41/bin/bash\necho This is level \44SHLVL.\n' >qlvl.sh

bash qlvl.sh

This is level 2.

source qlvl.sh

This is level 1.

很少递归

cat <qlvl.sh

#!/bin/bash

export startLevel

echo This is level $SHLVL starded:${startLevel:=$SHLVL}.

((SHLVL<5)) && ./qlvl.sh

eoqlvl

chmod +x qlvl.sh

./qlvl.sh

This is level 2 starded:2.

This is level 3 starded:2.

This is level 4 starded:2.

This is level 5 starded:2.

source qlvl.sh

This is level 1 starded:1.

This is level 2 starded:1.

This is level 3 starded:1.

This is level 4 starded:1.

This is level 5 starded:1.

并进行最终测试:

printf %b '\43\41/bin/bash\necho Ending this.\nexit 0\n' >finalTest.sh

bash finalTest.sh

Ending this.

source finalTest.sh

Ending this.

...您可能会注意到两种语法之间的行为有所不同。 ;-)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值