簡體   English   中英

如何為每個命令在文件中重定向 STDOUT 和 STDERR?

[英]How to redirect STDOUT and STDERR in a file for every command?

我正在嘗試將來自終端的 STDOUT 和 STDERR(如果可能的話,用戶提供的 STDIN)存儲在每個命令的文件中。

所以我開始創建一個陷阱 function 以編輯的方式執行每個命令,例如:

shopt -s extdebug

preexec_invoke_exec () {
    [ -n "$COMP_LINE" ] && return  # do nothing if completing
    [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND

    eval `history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//"` |& tee ~/recent_output.txt
    return 1 # This prevent executing of original command
}
trap 'preexec_invoke_exec' DEBUG


並保存上述文件並執行

source file.sh

這完成了我想要的工作,但阻止了一些命令的執行

cd ..

這樣做的原因是管道創建了一個子 shell,然后執行其中的每個命令。 所以主 shell 不受影響。

甚至 bash 的腳本功能,即

script ~/recent_output.txt

工作但只在您exit終端后給出 output

所以,基本上我想存儲/獲取在 bash 終端中執行的先前命令的 output。 你可以用任何語言幫助我(golang、python...)。

可以使用以下命令捕獲 bash 腳本(例如 x.sh)的命令、標准錯誤和標准輸出:

bash -x x.sh 2> >(tee err.txt) | tee out.txt

err.txt 將捕獲已執行的命令(以“+”為前綴),以及每個命令的標准錯誤。 out.txt 將捕獲 output

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM