如何从/ usr / bin / time输出到执行中正确位置的文件?

时间:2013-08-21 03:55:06

标签: bash shell time

我正在编写一个脚本来批量计算使用不同输入文件和标志的快速执行,并以格式化方式在外部文件中输出它们。这是脚本的一部分,因此您可以理解上下文:

echo $file 
echo "Naive Pivot"
count=1
while [ $count -lt 4 ]
do
    echo "Run $count"
    count=$(($count+1))
    time ./quicksort -pn -so < $file
    echo
done

我尝试过正常重定向(来自stdout)

time ./quicksort -pn -so < $file > timing.txt

并试图从stderr重定向(虽然我可能做错了)。

time ./quicksort -pn -so < $file 2 >> timing.txt

我也试过

/usr/bin/time -p -o timing.txt -a ./quicksort -pn -so < $file

使用标准的stderr输出设置运行脚本,如下所示

./testData.sh > timing.txt 2 > timing.txt

然而,它们都将所有定时数据附加到文件的END,而不是在我之前和之后放置的echo命令的输出之间。因此,虽然在命令行中按顺序出现所有内容,但当我尝试运行我的脚本将输出定向到文件时,所有回声。

我已经耗尽了我的个人知识并需要帮助。如何在相对于执行的位置正确输出时间命令(时间或/ usr / bin / time)到我的文件中?提前谢谢。

1 个答案:

答案 0 :(得分:2)

time是一个内置的bash。 /usr/bin/time是一个简单的命令行程序。他们需要不同的待遇。

首先,我认为您要做的是将stderrstdout重定向到文件。在bash中,您可以使用&>file(或&>>file,如果您要追加),或者您可以使用更通用的解决方案:>file 2>&1。 (参见man bash)中的“重定向标准输出和标准误差”。

这将适用于/usr/bin/time,这是一个普通程序,它创建一个子shell来运行其参数描述的程序,然后将时间信息输出到stderr

但是在bash内置time(实际上是语法上是命令行的一部分)的情况下,由于命令行time d 包括重定向;时间信息被发送到bash本身的未经重定向的stderr。要获得所需内容,您需要在子shell中运行整个time d管道:

(time ./quicksort -pn -so < $file) &> timing.txt