2011-03-24 16 views
0

讓我首先用不在linux bash環境下工作的命令來演示場景。重定向本身是參數的程序的輸出

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

在這裏,在上述情況下,我想計劃「PROG1」的輸出重定向到/ dev/null,並且out.tmp文件。但是這個命令會將定時運行的輸出(如果有的話)重定向到out.tmp。

任何幫助將不勝感激。

回答

0

從一個簡單的例子來看,我的經歷恰恰相反。

$ time ls 1> foo 2> bar 

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

ls的輸出被重定向,輸出的時間不是!

+0

非常感謝的答案。但是我只想要1和2一起附加ls。 – 2011-03-24 17:37:16

0

這裏的問題是在定時運行而不是在bash中。如果您使用標準時間命令替換定時運行的相同命令,則可以按照您的預期工作。主要是定時運行需要再次通過shell運行prog1的參數。如果它是一個shell腳本,你可以用eval命令來完成。例如:

#!/bin/sh 

echo here is some output 
echo $* 
eval $* 

現在運行

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

事實上,我錯過了一件事情,那就是在定時運行之後有一個爭論。即$ timed-run 20 prog1 1>/dev/null和2> out.tmp。我希望1和2都被重定向到prog1,而不是定時運行 – 2011-03-24 17:50:25

+0

是的,事實上,時間工作正常,但是定時運行也是expect軟件包的腳本。是否有任何建議如何解決這種情況,因爲我想要一個定時運行的可執行文件,即prog1 – 2011-03-24 18:08:25

+0

在這種情況下,假設20是定時運行的參數,那麼你只需要從$ *中刪除它在我的例子 – ltc 2011-03-24 18:09:51

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