重定向程序的输出本身就是一个参数

时间:2011-03-24 17:28:35

标签: linux bash

让我首先使用在linux bash环境下无效的命令来演示场景。

$ timed-run prog1 1>/dev/null 2>out.tmp

在上面的例子中,我想将程序'prog1'的输出重定向到/ dev / null和out.tmp文件。但是这个命令会将timed-run的输出(如果有的话)重定向到out.tmp。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

从一个简单的例子来看,我恰恰相反。

$ time ls 1> foo 2> bar

real    0m0.002s
user    0m0.004s
sys     0m0.000s
$ more foo
<show files>
$ more bar
<empty>
$

ls的输出被重定向,时间输出不是!

答案 1 :(得分:0)

这里的问题是定时运行而不是bash。如果使用标准时间命令运行相同的命令替换timed-run,则按预期工作。主要是定时运行需要再次通过shell运行prog1的参数。如果是shell脚本,则可以使用eval命令执行此操作。例如:

#!/bin/sh

echo here is some output
echo $*
eval $*

现在运行

timed-run prog1 '1>/dev/null' '2>output.tmp'

答案 2 :(得分:0)

如何使用sh -c 'cmd'如此:

    time -p sh -c 'ls -l xcvb 1>/dev/null 2>out.tmp'
    time -p sh -c 'exec 0</dev/null 1>/dev/null 2>out.tmp; ls -l xcvb'

    # in out.tmp:
    # ls: xcvb: No such file or directory