在 bash 脚本中运行 bash 脚本

在 bash 脚本中运行 bash 脚本

我正在编写一个用于安装环境管理器的 bash 脚本,但这意味着我必须在多个目录中安装某些内容。看看我的另一个问题更多细节。但这让我重新思考我的方法。

我现在正在考虑将其制作为 3 个独立的 bash 脚本。然后一个人就会打电话给另一个人。事情是这样的:我需要source .bash_profile在父 shell 中进行一些操作。问题是,在 bash 脚本中调用的 bash 脚本是否会在新 shell 或父 shell 中运行,或者是否会在父 shell 内的主机 bash 脚本 shell 内的新 shell 中运行?

“shell-ception”我知道它正在烹饪我的大脑。我真的很想自动化这个过程,这就是我面临的墙。

答案1

如果您在 shell 中执行命令,则该命令始终作为该 shell 的子进程执行,除非

  1. 它是一个内置的 shell(如cd
  2. 它的来源是 ( . /path/to/file, source /path/to/file)
  3. 它是通过执行的exec

您可以使用 轻松检查ps -e -o pid,ppid,user,args

source .bash_profile仅当变量已标记为导出时才影响子 shell(请参阅declare -x)。

答案2

这是实际差异:

  • 运行命令使 shell 创建一个子进程。先前在子进程中定义的任何环境变量都将丢失给父进程。

  • 使用source脚本强制在当前进程(父进程内)运行。然后,脚本中的环境变量将保留。

相关内容