使用exec命令运行程序有什么区别?
例如,如果我制作了如下的脚本文件.
#script1
python test.py
#script2
exec python test.py
Run Code Online (Sandbox Code Playgroud)
两者似乎都返回相同的结果.
它们是等价的吗?
exec是一个内置的shell,它用新进程替换当前进程的映像.它与调用二进制/可执行文件不同.
要看到差异,请执行以下操作:
#script1
python test.py
echo Hello
#script2
exec python test.py
echo Hello
Run Code Online (Sandbox Code Playgroud)
您将看不到Hello在第二个脚本中打印.
exec贝壳的另一个目的.它可以用于重定向.例如,
exec 1>file
Run Code Online (Sandbox Code Playgroud)
将stdout进程重定向到file.
如果你有:
exec 1>file
echo hello
echo world
Run Code Online (Sandbox Code Playgroud)
然后脚本将重定向hello和world以file代替stdout.