jwb*_*ley 0 bash shell subshell
我的理解是当我在BASH shell中执行脚本时,使用类似$ ./myscript.sh子shell的语法启动并且代码在该shell中运行,并且在我的shell上打印STDOUT和STDERR输出,STDIN取自我的shell.这就是脚本的交互方式.
文件" myscript " 的顶行是#!/bin/bash,这表示用于在脚本文件中执行语法的解释器.
如果我使用语法source myscript.sh,我的脚本中的代码被"拉"到我当前的环境并在那里执行,而不是在子shell中执行.我无法在我调用的脚本中运行以下代码$ ./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\]'
Run Code Online (Sandbox Code Playgroud)
如果我删除#!/bin/bash并使用source此脚本更改我的命令提示符.它可以以一种我可以调用它的方式安排在一个脚本中$ ./myscript.sh,它会改变我当前的shell,而不是子shell吗?