[英]Bash: Execute script in context of calling shell
我的理解是,当我使用$ ./myscript.sh
的语法在BASH shell中执行脚本时, $ ./myscript.sh
了一个子shell,并且代码在该shell中运行,并在我的shell上打印了STDOUT和STDERR输出,使用了STDIN从我的壳。 这是脚本交互的方式。
文件“ myscript ”的第一行是#!/bin/bash
,这表明将用于执行脚本文件中语法的解释器。
如果使用语法source myscript.sh
则脚本中的代码将“拉入”当前环境并在此处执行,而不是在子外壳中执行。 我无法使以下代码在用$ ./myscript.sh
调用的脚本中运行并影响我的当前shell:
#!/bin/bash
PS1='`
if [ $? -eq 0 ];
then echo -n "\[\033[00;35m\]\u\[\033[01;32m\]@\[\033[00;35m\]\h\[\033[00;32m\](\[\033[01;35m\]\W\[\033[01;32m\])\[\033[00;32m\]\$";
else echo -n "\[\033[00;35m\]\u\[\033[01;31m\]@\[\033[00;35m\]\h\[\033[01;31m\](\[\033[35m\]\W\[\033[31m\])\[\033[00;31m\]\$";
fi`\[\033[0m\]'
如果我放下#!/bin/bash
并使用source
此脚本会更改命令提示符。 可以将它安排在脚本中,使之可以用$ ./myscript.sh
调用,这样就可以更改当前的shell,而不是sub shell吗?
调用没有source
的脚本后,该脚本将在子shell中运行,并且无法更改父shell的环境。
您可以使用shebang行来获取脚本。 来源时,它只是被忽略。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.