繁体   English   中英

Bash:在调用Shell的上下文中执行脚本

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM