直接运行程序和在脚本中调用exec有什么不同?

San*_*Kim 3 linux exec

使用exec命令运行程序有什么区别?

例如,如果我制作了如下的脚本文件.

#script1
python test.py

#script2
exec python test.py
Run Code Online (Sandbox Code Playgroud)

两者似乎都返回相同的结果.

它们是等价的吗?

P.P*_*.P. 6

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)

然后脚本将重定向helloworldfile代替stdout.