我可以使用脚本将终端环境更改为 bash shell,然后在同一脚本中更改 shell 后执行其他命令吗?

Can I change my terminal environment to bash shell using a script and then execute other commands after changing the shell in the same script?

我正在尝试编写一个脚本,将我的主终端设置为使用 bash shell。我知道 #!/bin/bash 会将脚本中的所有命令调用为 运行 和 bash shell 但我想要的是一个专门更改 shell 到 bash.

例如:(这是我的终端打开时的样子。)

$

当我想将终端设置为 bash 时,我手动输入 bash 命令并按回车键。

$bash

结果:

[tyg@rooto ~]$

问题是,如果我使用上述命令编写脚本,它可以工作,但脚本中 bash 命令之后的任何命令都无法执行。 例如

#!/bin/bash
bash
echo "setting terminal environment to bash"
echo "success"

输出:

[tyg@rooto ~]$ 

预期输出:(类似这样)

[tyg@rooto ~]$ setting terminal environment to bash
[tyg@rooto ~]$ success

或(像这样)

[tyg@rooto ~]$
[tyg@rooto ~]$ setting environment
[tyg@rooto ~]$ success

以上任何一项都是我认为应该预料到的。为什么脚本中的两个 echo 命令无法执行,是否有解决方法。谢谢

示例 1

#!/bin/bash

bash << "EOT"
echo "setting environment"
EOT

示例 2

将此代码添加到示例脚本 test.sh,然后启动它:
#!/bin/bash 

echo "Shell: $$"
bash << "EOT"
echo "Shell: $$"
EOT
echo "Shell: $$"

结果:

Shell: 569 # Current shell
Shell: 570 # Shell in your new enviroment
Shell: 569 # Back to old shell

#!/bin/bash 将调用 shell,随后的脚本命令将在其中执行,完成后,shell 将消失。这就是您“在已更改的 shell”中执行命令的方式“

” 第 2 行的

bash 打开第二个 bash shell,其中正在执行您的 echo 命令。它也会在脚本完成后消失 - 这就是为什么您没有看到预期的输出。

是的,您可以在任何 shell 中执行“bash”脚本,只要第一行包含您想要的正确 shell。

通过删除第二行的 bash,您将看到您的输出。