如何在当前 shell 中执行某些操作

如何在当前 shell 中执行某些操作

我想创建一个 bash 脚本或类似的脚本,可以在当前 shell 中执行:

 echo '#!/bin/bash 
  export foo="bar" ' > zoom.sh

但如果我想在当前进程中运行这个脚本:

exec ./zoom.sh

那么我的终端将退出“进程完成”,即使我使用set +e,它仍然退出。

sourcewhicheval将在当前 shell 中运行内容,所以也许 eval 是我最好的选择? bash 函数可以工作 - 但我source首先必须依赖用户来使用它。

答案1

从手册来看,exec 不会创建新进程,它只是替换当前的 shell,因此执行后它也会终止会话。

exec [-cl] [-a name] [command [arguments]]
如果指定了命令,它将替换 shell。没有创建新进程。这些参数成为命令的参数。如果提供了 -l 选项,shell 会在传递给命令的第 0 个参数的开头放置一个破折号。这就是登录(1)的作用。该-c选项导致命令在空环境中执行。如果 -a提供,shell 将 name 作为第 0 个参数传递给执行的命令。如果由于某种原因无法执行命令,则非交互式 shell 将退出,除非execfail启用了 shell 选项,在这种情况下它将返回失败。如果文件无法执行,交互式 shell 将返回失败。如果不指定command,则任何重定向都在当前shell中生效,返回状态为0。如果存在重定向错误,则返回状态为1。

$ cat zoom.sh
#!/bin/bash
export foo="bar"
echo $?
$ exec ./zoom.sh
0
Connection to localhost closed

相关内容