讓我首先用不在linux bash環境下工作的命令來演示場景。重定向本身是參數的程序的輸出
$ timed-run prog1 1>/dev/null 2>out.tmp
在這裏,在上述情況下,我想計劃「PROG1」的輸出重定向到/ dev/null,並且out.tmp文件。但是這個命令會將定時運行的輸出(如果有的話)重定向到out.tmp。
任何幫助將不勝感激。
讓我首先用不在linux bash環境下工作的命令來演示場景。重定向本身是參數的程序的輸出
$ timed-run prog1 1>/dev/null 2>out.tmp
在這裏,在上述情況下,我想計劃「PROG1」的輸出重定向到/ dev/null,並且out.tmp文件。但是這個命令會將定時運行的輸出(如果有的話)重定向到out.tmp。
任何幫助將不勝感激。
從一個簡單的例子來看,我的經歷恰恰相反。
$ time ls 1> foo 2> bar
real 0m0.002s
user 0m0.004s
sys 0m0.000s
$ more foo
<show files>
$ more bar
<empty>
$
ls的輸出被重定向,輸出的時間不是!
這裏的問題是在定時運行而不是在bash中。如果您使用標準時間命令替換定時運行的相同命令,則可以按照您的預期工作。主要是定時運行需要再次通過shell運行prog1的參數。如果它是一個shell腳本,你可以用eval命令來完成。例如:
#!/bin/sh
echo here is some output
echo $*
eval $*
現在運行
timed-run prog1 '1>/dev/null' '2>output.tmp'
事實上,我錯過了一件事情,那就是在定時運行之後有一個爭論。即$ timed-run 20 prog1 1>/dev/null和2> out.tmp。我希望1和2都被重定向到prog1,而不是定時運行 – 2011-03-24 17:50:25
是的,事實上,時間工作正常,但是定時運行也是expect軟件包的腳本。是否有任何建議如何解決這種情況,因爲我想要一個定時運行的可執行文件,即prog1 – 2011-03-24 18:08:25
在這種情況下,假設20是定時運行的參數,那麼你只需要從$ *中刪除它在我的例子 – ltc 2011-03-24 18:09:51
如何使用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
非常感謝的答案。但是我只想要1和2一起附加ls。 – 2011-03-24 17:37:16