Bash

將腳本的所有輸出擷取到文件中(來自腳本本身)

  • June 1, 2020

我有一個 bash 腳本,它呼叫各種命令並列印一些輸出(來自被呼叫的命令本身,例如git pull,以及腳本本身生成的資訊性消息,例如Operation took XX minutes.

我想將整個輸出從腳本本身擷取到一個文件中:基本上我試圖避免./myscript.sh | tee file.txt非相關原因而需要呼叫。

基本上我想做這樣的事情:

startCapture

git pull

echo "Text"

other-command

endCapture

我還要求在腳本執行時將輸出列印在我的 shell 上。

最終目標是:

  1. ./myscript.sh無需額外的 shell 結構即可執行
  2. 像我現在一樣查看終端上的輸出
  3. 在磁碟上獲取包含整個輸出的文件

這甚至可能嗎?

我發現擷取任何會話的所有輸出的一種方法是啟動一個新的 bash 會話並發送到日誌文件。它對於跟踪不僅僅是一個腳本非常有用。

重擊 | tee ~/bash.log #這將保存標準輸出,直到 bash 會話結束
重擊 | tee ~/bash.log 2>&1 #這將保存所有輸出,包括錯誤,直到 bash 會話結束

或者你可以自己編寫腳本

./myscript.sh | tee ./myscript.log #this will log only the output of the script.

您始終可以script在腳本內部呼叫以記錄所有內容。

至於在 bash 腳本中同時列印和記錄所有內容log.txt

#!/bin/bash

if [ -z "$SCRIPT" ]
then 
   /usr/bin/script log.txt /bin/bash -c "$0 $*"
   exit 0
fi

echo teste

看到日誌log.txt

$ ./a.sh
Script started, output file is log.txt
teste

Script done, output file is log.txt
$ cat log.txt
Script started on Fri Feb 16 17:57:26 2018
command: /bin/bash -c ./a.sh 
teste

Script done on Fri Feb 16 17:57:26 2018

引用自:https://unix.stackexchange.com/questions/424652