Linux 重定向本身是参数的程序的输出

Linux 重定向本身是参数的程序的输出,linux,bash,Linux,Bash,让我先用在LinuxBash环境下不起作用的命令演示这个场景 $ timed-run prog1 1>/dev/null 2>out.tmp 在上面的例子中,我想将程序“prog1”的输出重定向到/dev/null和out.tmp文件。但此命令将timed run的输出(如果有)重定向到out.tmp 任何帮助都将不胜感激。从一个简单的例子来看,我的经历正好相反 $ time ls 1> foo 2> bar real 0m0.002s user 0m0.

让我先用在LinuxBash环境下不起作用的命令演示这个场景

$ timed-run prog1 1>/dev/null 2>out.tmp
在上面的例子中,我想将程序“prog1”的输出重定向到/dev/null和out.tmp文件。但此命令将timed run的输出(如果有)重定向到out.tmp


任何帮助都将不胜感激。

从一个简单的例子来看,我的经历正好相反

$ time ls 1> foo 2> bar

real    0m0.002s
user    0m0.004s
sys     0m0.000s
$ more foo
<show files>
$ more bar
<empty>
$
$time ls 1>foo 2>条
实0.002s
用户0m0.004s
系统0m0.000s
多花$foo
再加一块吧
$

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

这里的问题是在定时运行中,而不是在bash中。如果您运行相同的命令,将定时运行替换为标准时间命令,这将如您所期望的那样工作。主要定时运行需要通过shell再次运行prog1的参数。如果是shell脚本,则可以使用eval命令执行此操作。例如:

#!/bin/sh

echo here is some output
echo $*
eval $*
快跑

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

像这样使用
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
time-psh-c'ls-lxcvb1>/dev/null 2>out.tmp'
time-psh-c'exec0/dev/null 2>out.tmp;ls-lxcvb'
#in out.tmp:
#ls:xcvb:没有这样的文件或目录

非常感谢您的回答。但我希望1和2只与ls连接。事实上,我错过了一件事,即计时运行后也会有一个参数。i、 e$timed run 20 prog1 1>/dev/null和2>out.tmp。我希望1和2都被重定向到prog1,而不是timed run是的,事实上时间和预期的一样正常,但timed run也是expect包中的一个脚本。对于如何处理这种情况,是否有任何建议,因为我希望对可执行文件进行定时运行,即PROG1在这种情况下,假设20是定时运行的参数,那么您只需要将其从$*中删除在我的示例中,我希望您需要在expect中获取参数并在bash子shell中运行它,但我只写过2-3个expect脚本,所以我不知道如何快速完成。