我的理解是,当我在 BASH shell 中使用诸如启动子 shell 的语法执行脚本$ ./myscript.sh
并且代码在该 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\]'
如果我放弃#!/bin/bash
并使用source
此脚本会更改我的命令提示符。是否可以以我可以调用它的方式将它安排在脚本中,$ ./myscript.sh
并且它会对我当前的 shell 而不是子 shell 进行更改?