gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 09:27:02 25 4
gpt4 key购买 nike

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

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 命令的输出之间。因此,虽然命令行中的所有内容都按顺序出现,但当我尝试运行将输出定向到文件的脚本时,所有的都是回显。

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

最佳答案

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

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

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

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

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

关于bash - 如何在执行过程中从/usr/bin/time输出到正确位置的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18348593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com