“exec”命令有什么作用?

Modified on: Fri, 08 Jun 2018 22:53:23 +0800

我不明白bash命令exec。我已经看到它在内部脚本中使用所有输出重定向到一个文件(如)。但我不明白它是如何工作的或一般的。我已阅读了手册页,但我不理解它们。

作者:AzkerM,becko

最佳答案

man bash说:

exec [-cl] [-a name] [command [arguments]]
      If command is specified, it replaces the shell.  No new  process
      is  created.  The arguments become the arguments to command.  If
      the -l option is supplied,  the  shell  places  a  dash  at  the
      beginning  of  the  zeroth  argument passed to command.  This is
      what login(1) does.  The -c option causes command to be executed
      with  an empty environment.  If -a is supplied, the shell passes
      name as the zeroth argument to the executed command.  If command
      cannot  be  executed  for  some  reason, a non-interactive shell
      exits, unless the execfail shell option  is  enabled.   In  that
      case,  it returns failure.  An interactive shell returns failure
      if the file cannot be executed.  If command  is  not  specified,
      any  redirections  take  effect  in  the  current shell, and the
      return status is 0.  If there is a redirection error, the return
      status is 1.

最后两行是重要的:如果你自己运行exec,没有命令,它只会使重定向适用于当前的shell。你可能知道当你运行command > filecommand的输出写入file而不是写入终端(这称为重定向)。如果你运行exec > file,然后重定向适用于整个shell:shell生成的任何输出都写入file而不是终端。例如这里

bash-3.2$ bash
bash-3.2$ exec > file
bash-3.2$ date
bash-3.2$ exit
bash-3.2$ cat file
Thu 18 Sep 2014 23:56:25 CEST

我首先启动一个新的bash shell。然后,在这个新的shell中我运行exec > file,以便将所有输出重定向到file。实际上,之后我运行date但是没有输出,因为输出被重定向到file。然后我退出我的shell(以便重定向不再适用),我看到file确实包含我之前运行的date命令的输出。

作者:muru,fkraiem

相关问答

添加新评论