2011-03-15 108 views
2

我读过如何登录某些脚本或单独的命令,但没有就如何从BASH外壳内登录的所有命令中。我想要做的是:重定向所有命令标准输出/标准错误日志文件从脚本

  • 用户运行脚本。 (脚本从现在起登录标准输出/标准错误到一个日志文件)
  • 用户做其他的东西/运行其他命令/回声/等等,所有这些都在日志文件记录。

一个不太罗嗦/ codeY的更多例子:

EXEC>>(TEE LOGFILE.LOG)由用户输入的时候不正是我想做的事情。它记录到标准输出LOGFILE.LOG,并将继续这样做,直到bash shell中被关闭。但是,将这个命令作为脚本运行并不会执行此操作。我想要它。

回答

5

您不能在自己的shell下运行的脚本(即以#!/bin/bashchmod +x开头,并像调用可执行文件一样调用它)来执行此操作。重定向会影响子外壳,但无法到达父级以执行所需操作。您可以.将在你的shell执行命令,然后只要你想,你可以重定向的东西文件(如. ./myscript.sh)。

另一种方法是让脚本启动一个子shell本身(它会继承stdin,stdout,stderr)。这是script命令所执行的操作。直到用户退出子shell这一切都记录到一个名为文件(默认)typescript

+0

+1提的“脚本”的命令,我发现是很方便! – 2011-06-08 13:31:50

0

如何别名?

alias Start-Script='script logfile.txt' 
1

$ bash |三通/tmp/logs/logfile.txt

$ LS的/ tmp /日志

LOGFILE.TXT

$ < CTRL-d>

出口

$猫的/ tmp /日志/ LOGFILE.TXT

LOGFILE.TXT


如果你正在寻找标准输出,那么这似乎工作。如果你想要stdin/stdout,那么script就是前面提到的方法。

0

仅供参考,如果有人想这样做来启动一个守护进程(后台进程),我会建议看看优秀的daemonize

daemonize允许您从某个目录(不使用cd'ing),重定向标准输出,重定向stderr,编写pidfile或锁定文件,并以特定用户身份运行。这是非常有用的,例如。当你编写你自己的小型初始化脚本。从man page

简介最告诉你它很简单用法:

daemonize [-a] [-c directory] [-e stderr] [-o stdout] [-p pidfile] [-l lockfile] [-u user] [-v] path [arg] ... 
相关问题