有什么理由不在 shell 脚本中执行?

Ant*_*ony 4 bash

我有一堆包装 shell 脚本,它们操作命令行参数并在最后调用另一个二进制文件之前执行一些操作。有什么理由不总是把exec二进制放在最后吗?看起来这会更简单、更有效,但我从未见过它完成。

Joh*_*024 5

如果您检查/usr/bin,您可能会发现许多以exec命令结尾的 shell 脚本。举个例子,这里是/usr/bin/ps2pdf(debian):

#!/bin/sh
# Convert PostScript to PDF.

# Currently, we produce PDF 1.4 by default, but this is not guaranteed
# not to change in the future.
version=14

ps2pdf="`dirname \"$0\"`/ps2pdf$version"
if test ! -x "$ps2pdf"; then
____ps2pdf="ps2pdf$version"
fi
exec "$ps2pdf" "$@"
Run Code Online (Sandbox Code Playgroud)

exec使用它是因为它消除了在不再需要 shell 进程后保持其活动状态的需要。

我的/usr/bin目录有超过 150 个使用exec. 所以,使用exec很常见。

不使用的一个原因是二进制文件执行完毕exec是否需要进行一些处理。