使用exec命令的目的是什么

问题描述 投票:0回答:2

这里我不明白下面这段代码试图实现什么目的,我做了搜索 在线了解 exec 的使用,但不太明白,有人可以帮忙解释一下吗?

代码片段:

exec $(dirname "$0")/init.sh -l interface.mod -l instrument.mod -a postinit.mod -a async.mod "$@"

谢谢。

linux bash
2个回答
12
投票

exec
是Bash shell的内置命令,它允许您执行完全替换当前进程的命令,即当前的shell进程被销毁,并完全被您指定的命令替换。当您想要运行命令,但不希望 bash shell 成为父进程时,它很有用。当您执行命令时,它完全取代了 bash - 不会分叉新进程,不会创建新的 PID,并且 bash 控制的所有内存都会被销毁和覆盖。例如,如果您想授予用户对某个命令的受限访问权限,这会很有用。如果命令因错误而退出,用户将不会返回到执行该命令的特权 shell。
exec
也可以在没有任何命令的情况下使用,将当前 shell 的所有输出重定向到文件。这是来自 man bash 的定义:

exec [-cl] [-a 名称] [命令 [参数]] 如果指定了 command,它将替换 shell。 无新流程 被创建。 这些参数成为命令的参数。 如果 提供了 -l 选项,shell 在 传递给命令的第零个参数的开头。 这是 登录(1)做什么。 -c 选项导致命令被执行 与空旷的环境。 如果提供 -a,shell 将通过 name 作为执行命令的第 0 个参数。 如果命令 由于某种原因无法执行,非交互式 shell 退出,除非启用了 exec failed shell 选项。 在那 情况下,返回失败。 交互式 shell 返回失败 如果文件无法执行。 如果未指定命令, 任何重定向都会在当前 shell 中生效,并且 返回状态为0。如果存在重定向错误,则返回 状态为 1。


0
投票

sh /sdcard/Android/data/com.k2tap.master/files/exe/activate.sh

© www.soinside.com 2019 - 2024. All rights reserved.