首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解exec命令

理解exec命令
EN

Stack Overflow用户
提问于 2015-01-20 15:40:49
回答 2查看 111关注 0票数 0

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

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

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-20 15:45:45

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

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

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

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

票数 3
EN

Stack Overflow用户

发布于 2015-01-20 15:45:19

代码语言:javascript
复制
exec foobar

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28049393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档