是的,它将任何进一步的输出发送到名为logfile 的文件。换句话说,它将标准输出(也称为stdout)重定向到文件logfile。
示例
让我们从这个脚本开始:
$ cat >script.sh
#!/bin/bash
echo First
exec >>logfile
echo Second
如果我们运行脚本,我们会看到第一个但不是第二个 echo 语句的输出:
$ bash script.sh
First
第二个echo 语句的输出转到文件logfile:
$ cat logfile
Second
$
如果我们使用了exec >logfile,那么每次运行脚本时logfile 将被覆盖。因为我们使用了>> 而不是>,所以输出将追加到logfile。例如,如果我们再次运行它:
$ bash script.sh
First
$ cat logfile
Second
Second
文档
这记录在man bash:
exec [-cl] [-a name] [command [arguments]]
if command
已指定,它会替换 shell。不会创建新进程。这
参数成为命令的参数。如果 -l 选项是
提供时,shell 在第零个开头放置一个破折号
参数传递给命令。这就是 login(1) 的作用。 -c
选项导致命令在空环境下执行。如果
提供 -a 时,shell 将 name 作为第零个参数传递给执行的命令。如果由于某种原因无法执行命令,则
非交互式 shell 退出,除非 execfail shell 选项是
启用。在这种情况下,它返回失败。交互式外壳
如果文件无法执行,则返回失败。 如果命令不是
指定,任何重定向都在当前 shell 中生效,并且
返回状态为0。如果有重定向错误,返回
状态为 1。[强调已添加。]
在您的情况下,没有指定 command 参数。因此,exec 命令执行重定向,在这种情况下,这意味着任何进一步的标准输出都将发送到文件 logfile。
查找命令和-exec
find 命令有一个-exec 选项。例如:
find / -type f -exec grep -l "bash" {} \;
除了名字相似之外,这里的-exec与shell命令exec完全没有关系。
构造-exec grep -l "bash" {} \; 告诉find 在它找到的任何文件上执行命令grep -l "bash"。这与 shell 命令 exec >>logfile 无关,后者不执行任何操作,但具有重定向输出的效果。