2016-04-27 126 views
-1

我想修改和重定向所有正在运行的进程的输出。我知道,如果我知道进程的名字,我可以做这样的事情Unix:如何修改和重定向所有正在运行的进程的标准输出

process 2>&1 >/dev/null 

这将重定向标准错误和标准输出到dev/null的。首先,如何在将它发送到dev/null或其他地方之前修改stdout?一种可能的解决方案是

process 2>&1 | awk '{print "$SOME_ENV_VAR|" $0;}' > dev/null 

这是正确的方法吗?它是否忍受stdout和stderr都被重定向?

  1. 如果不是重定向到dev/null,而是想要打印到控制台?

  2. 更大的问题是,如何为每个正在运行的进程执行此操作?我需要在Linux中执行此操作,我不知道正在运行的进程的名称。这是可行的吗?

我对shell脚本相当陌生,所以请原谅我这些问题是微不足道的。

+0

首先,你应该说明你正在使用哪种外壳。在linux下,你很可能使用bash。然后,_running processes_建议您在启动进程后尝试修改I/O分配 - 这是不可能的(至少没有特殊的内核支持)。但是,您的示例建议您在进程启动时前往处理I/O。最后,你应该对你想达到的目标给予更多的批评。 sh(以及bash)在进程的stin/stdout/stderr可以相互连接方面非常强大。 – rpy

+0

谢谢,我刚刚注意到'awk'{print“$ SOME_ENV_VAR |” $ 0;}''不会改变env变量。我如何在awk中使用环境变量? – AbtPst

+1

这不是'awk'的属性,而是你使用单引号(''')和'awk'脚本参数的结果。如果例如它将插入。你确实使用过:'awk'{print'“$ SOME_ENV_VAR |”'$ 0;}''。但是,在发送'/ dev/null'之前,这只会将'$ SOME_ENV_VAR'中的值预加到'process'中的每一行。 – rpy

回答

1

从讨论中可以看出,你并不是真的希望 将已经运行的进程的输出重定向到其他地方。但你似乎试图修改你开始的过程的输出。

随着bash(似乎是你在用什么),你可以使用[FD]>TARGET resp。 [FD]<SOURCE用于指定进程的I/O通道。 FD是可选的并且是文件描述符编号。将它排除在和1(=标准输出)>上意味着0(= stdin)。 (2是stderr的着名文件描述符)。 TARGETSOURCE我是文件系统对象(例如文件,设备,命名管道,unix域套接字)或&FD,其中FD再次是文件描述符编号并指示要使用的(打开)文件描述符。

您将使用它例如通过写入2>&1将错误输出发送到标准输出所在的位置。

如果您现在要对进程的输出进行后处理(实际上,这是shell命名中的一个管道,因为它可能是由多个命令和I/O重定向组成的任何复杂(shell)语句。) 一个管道:(A | B)。
这基本上连接进程A的标准输出和进程B的标准输入。

对于操作输出,您可以使用任何其他的unix命令或程序。最常见的是sed(用于应用基于正则表达式的替换)或awk。其他人也可能推荐perlpython

在你的情况下,你打算用某个环境变量给出的前缀来加上每一行。

使用awk可以按如下方式写:

awk '{ print "'"$SOME_ENV_VAR"'|" $0;}' 

或外部值传递作为一个awk变量:

awk -v var="$SOME_ENV_VAR" '{ print var "|" $0;}' 

借此得远一点:

使用bash输出重定向功能非常强大。例如,您可以将标准输出传递到一个管道和另一个管道。例如:

(((echo hallo; echo ERROR >&2) | awk '{ print "stdout|" $0; }' >&4) 2>&1| awk '{ print "stderr: " $0;}') 4>&1 

这将处理由单独的AWK实例stdout和sterr和(组合)的输出发送到所述壳的正常标准输出。

+0

太棒了!谢谢。这里4是什么意思? 1是标准输出,2是标准错误,我认为3是调试。是对的吗? – AbtPst

+1

filedescriptor是一个整数(> = 0)。实际上,这是进程特定的打开文件表的索引。系统依赖最大。使用ulimit -n获取当前系统的最大值。我只是故意在这里选择了“4”。唯一的要求是:与已经打开的标准描述符值(0,1,2)不同。 '4>&1'打开这个描述符。 '&&4'正在使用它。 (Schell发出一个'dup'系统调用这些。)0,1,2由shell管理,因此“知名”的任何其他事情都取决于程序和用户。 – rpy

相关问题