如何在与调用脚本相同的进程中运行 bash 脚本?

1 bash process shell-script

我有一个 bash 脚本,它使用命令行参数调用/调用子脚本。如何强制子脚本在与调用者相同的 PID 下运行?

Jef*_*ler 5

或者,获取子脚本:

一个.sh

#!/bin/sh

echo one.sh: pid is "$$"
. ./two.sh
echo done with "$0"
Run Code Online (Sandbox Code Playgroud)

(命令与中.完全相同,但更便携)sourcebash.

二.sh

echo two.sh: pid is "$$"
Run Code Online (Sandbox Code Playgroud)

示例运行:

$ ./one.sh
one.sh: pid is 31290
two.sh: pid is 31290
done with ./one.sh
Run Code Online (Sandbox Code Playgroud)

该脚本two.sh将在与 相同的 shell 环境中运行one.sh,并且 shell 不会生成新进程来运行它。它的行为非常类似于调用 shell 函数,但方式不止一种(例如,使用return而不是从早期exit返回控制权;将完全退出 shell 会话)。two.shone.shexit

  • 这个问题是一些 `sh` shell(yash 和 dash)不允许 `.` 命令使用一个简单的文件名,所以你不能将命令行参数传递给源点脚本。另一方面,Bash、zsh 和 ksh 允许将命令行参数传递给点脚本。实际上,可能不需要传递参数,因为点脚本在同一环境中执行,因此可以只使用它需要使用的变量,就像函数能够执行的那样。 (2认同)