【问题标题】:How can I output from /usr/bin/time to a file at the right location within execution?如何从 /usr/bin/time 输出到执行中正确位置的文件?
【发布时间】:2013-08-21 03:55:06
【问题描述】:

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

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

我已经尝试正常重定向它(从标准输出)

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

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

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

【问题讨论】:

  • 嘿伙计,$file 的内容是什么,我想我有一个解决方案,但想确保我在发布答案之前了解所有变量。

标签: bash shell time


【解决方案1】:

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

首先,我认为您想要做的是将stderrstdout 都重定向到一个文件。在 bash 中,您可以使用 &amp;&gt;file(或 &amp;&gt;&gt;file,如果您想附加)来执行此操作,或者您可以使用更通用的解决方案:&gt;file 2&gt;&amp;1。 (参见man bash 中的“重定向标准输出和标准错误”)。

/usr/bin/time 可以正常工作,这是一个普通程序,它创建一个子shell 来运行由其参数描述的程序,然后将计时信息输出到stderr

但是对于 bash 内置 time,它实际上是命令行的语法部分,这将不起作用,因为命令行是 timed 包括重定向;计时信息被发送到 bash 本身的未重定向的stderr。为了得到你想要的,你需要在一个子shell中运行整个timed管道:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 2013-06-02
    • 2023-03-05
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    相关资源
    最近更新 更多