Shell
無法將 stdout/stderr 重定向到日誌文件
我有一個腳本
tmp.sh
#!/bin/bash echo hello sleep 3 echo 3
我想將腳本執行時間(以及腳本標準輸出)記錄到日誌文件中。
user$ time ./tmp.sh >& log.tmp real 0m3.003s user 0m0.000s sys 0m0.003s
不起作用。
user$ time ./tmp.sh 2>&1 log.tmp hello 3 real 0m3.003s user 0m0.002s sys 0m0.001s
這也行不通。
time
將命令輸出記錄到日誌文件的正確方法是什麼?
在它(實際)返回後的命令後,
time
內置的bash
STDERR 顯示時間資訊。因此,除非您將它們分組並將組的 STDERR 傳遞給文件,否則只有實際命令的 STDERR 將被重定向到文件,並且在命令返回時文件將被關閉(在time
顯示其資訊之前)。您可以使用命令分組,重定向 STDOUT 和 STDERR:
{ time ./tmp.sh ;} &>log.tmp
或者在子shell中執行:
( time ./tmp.sh ) &>log.tmp
例子:
$ { time sleep 1 ;} 2>time.log $ cat time.log real 0m1.001s user 0m0.000s sys 0m0.000s $ ( time sleep 1 ) 2>time.log $ cat time.log real 0m1.001s user 0m0.000s sys 0m0.000s