了解exec命令

时间:2015-01-20 15:40:50

标签: bash shell

寻找shell编程的一些基本帮助。

假设我们有一个名为foobar的命令,那么shell调用的作用是什么

  1. exec foobar
  2. exec 2> /var/log/foobar.log

2 个答案:

答案 0 :(得分:3)

第一个exec命令只应在脚本中使用 - 而不是在命令行终端中使用。它用程序foobar替换shell,而不是将其作为单独的子进程运行。 exec foobar之后脚本中的所有命令都不会被执行(即使shell找不到要执行的foobar);如果是交互式终端会话,它将报告错误并继续。

  

exec [-cl] [-a name] [command [arguments]]

     

如果提供了命令,它将替换shell而不创建新进程。如果提供了-l选项,则shell会在传递给command的第0个参数的开头放置一个破折号。这是登录程序的功能。 -c选项导致命令在空环境中执行。如果提供了-a,则shell将name作为命令的第0个参数传递。如果由于某种原因无法执行命令,则会退出非交互式shell,除非启用了 execfail shell选项。在这种情况下,它返回失败。如果无法执行文件,则交互式shell将返回失败。

第二个exec(使用I / O重定向但没有命令)会更改内容,以便标准错误流转到文件/var/log/foobar.log。来自shell或shell执行的命令的任何进一步错误消息都会转到日志文件中(除非还有很多I / O重定向)。

  

如果未指定命令,则可以使用重定向来影响当前的shell环境。如果没有重定向错误,则返回状态为零;否则返回状态为非零。

答案 1 :(得分:1)

exec foobar

将使用foobar替换您的shell进程。我认为你不是exec 2>/var/log/foobar.log而是exec foobar 2>/var/log/foobar.log。对于将2个标准错误消息发送到指定的日志文件,这也是一样的。您可以阅读手册页here

exec(1)命令与exec(3)调用类似。它将被调用进程的代码段替换为被调用程序的代码段。 1和3表示手册页部分。