gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:21:33 28 4
gpt4 key购买 nike

我的理解是,当我使用类似 $ ./myscript.sh 的语法在 BASH shell 中执行脚本时,会启动一个子 shell 并且代码在该 shell 中运行,带有 STDOUT 和 STDERR输出打印在我的 shell 上,STDIN 取 self 的 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?

最佳答案

一旦调用了没有source 的脚本,它就会在子shell 中运行,并且无法更改父shell 的环境。

您可以使用 shebang 行获取脚本。它在获取时被简单地忽略。

关于Bash:在调用 shell 的上下文中执行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19305048/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com