寻找shell编程的一些基本帮助。
假设我们有一个名为foobar
的命令,那么shell调用的作用是什么
exec foobar
exec 2> /var/log/foobar.log
答案 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表示手册页部分。