Redian新闻
>
怎么从script中把环境变量传回到当前shell中? (转载)
avatar
怎么从script中把环境变量传回到当前shell中? (转载)# Unix - 噫吁兮,危乎高哉
r*e
1
【 以下文字转载自 Linux 讨论区 】
发信人: realife (leda), 信区: Linux
标 题: 怎么从script中把环境变量传回到当前shell中?
发信站: BBS 未名空间站 (Sat Feb 14 17:20:19 2009)
试了bash和tcsh,都不能把script中设置的变量值传回执行script的
shell中。比如a.sh是:
#!/bin/sh
SRC=/newpath/
export SRC
然后,在shell中执行a.sh,
echo $SRC, 得到的并不是在script中设的值啊?
谢谢
avatar
c*t
2
你那个是 standard shell 里面的指令。
bash 是
export SRC=/newpath/
tcsh 是
setenv SRC /newpath/

【在 r*****e 的大作中提到】
: 【 以下文字转载自 Linux 讨论区 】
: 发信人: realife (leda), 信区: Linux
: 标 题: 怎么从script中把环境变量传回到当前shell中?
: 发信站: BBS 未名空间站 (Sat Feb 14 17:20:19 2009)
: 试了bash和tcsh,都不能把script中设置的变量值传回执行script的
: shell中。比如a.sh是:
: #!/bin/sh
: SRC=/newpath/
: export SRC
: 然后,在shell中执行a.sh,

avatar
r*e
3
执行script前,SRC已经设为/oldpath/,在bash下的script里面,试了
export SRC=/newpath/, 但是script执行完后,echo $SRC 还是/oldpath/。
用tcsh,执行时source a.sh,就可以得到SRC=/newpath/.
曾经有人说bash下,执行script a.sh 要用. a.sh,
但是用了显示/bin/. permission denied.

【在 c*****t 的大作中提到】
: 你那个是 standard shell 里面的指令。
: bash 是
: export SRC=/newpath/
: tcsh 是
: setenv SRC /newpath/

avatar
c*t
4

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
这个当然,child process 是不能 set parent process 的 environment.
都得用 source 。source 是这些 shell 的内部指令,不会执行新的 process
(单单执行一个 shell script 的话都是在 child process 里)。其目的就是
设置当前 shell 的 environmental variable,alias 等等。
我建议你找本 Unix nutshell 的书好好看看。你这样很浪费时间的。

【在 r*****e 的大作中提到】
: 执行script前,SRC已经设为/oldpath/,在bash下的script里面,试了
: export SRC=/newpath/, 但是script执行完后,echo $SRC 还是/oldpath/。
: 用tcsh,执行时source a.sh,就可以得到SRC=/newpath/.
: 曾经有人说bash下,执行script a.sh 要用. a.sh,
: 但是用了显示/bin/. permission denied.

avatar
r*e
5
谢谢回答,从头看书的时间也不少吧。也不是看过全能记住,
还不是出了问题再想为什么吗?
anyway, 在bash下,执行 . a.sh也OK了。没有用source,
SRC的值更新了。

【在 c*****t 的大作中提到】
:
: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
: 这个当然,child process 是不能 set parent process 的 environment.
: 都得用 source 。source 是这些 shell 的内部指令,不会执行新的 process
: (单单执行一个 shell script 的话都是在 child process 里)。其目的就是
: 设置当前 shell 的 environmental variable,alias 等等。
: 我建议你找本 Unix nutshell 的书好好看看。你这样很浪费时间的。

avatar
c*0
6
=> . a.sh
应该是 => . ./a.sh
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。