スクリプトのすべての出力をファイルとしてキャプチャします(スクリプト自体から)。

スクリプトのすべての出力をファイルとしてキャプチャします(スクリプト自体から)。

さまざまなコマンドを呼び出していくつかの出力を印刷するbashスクリプトがあります(たとえば、独自に呼び出されるコマンドとスクリプト自体git pullによって生成された情報メッセージの両方Operation took XX minutes)。

出力全体をファイルにキャプチャしたいです。スクリプト自体から./myscript.sh | tee file.txt:基本的に電話をかける必要がないようにしたいです。ここでは関係ありません理由。

基本的に私は次のことをしたいと思います。

startCapture

git pull

echo "Text"

other-command

endCapture

また、スクリプトの実行中に出力をシェルに印刷する必要があります。

究極の目標は次のとおりです。

  1. ./myscript.sh実行に追加のシェル構造は必要ありません。
  2. 今やっているように端末の出力を見てください。
  3. フル出力を含むディスクにファイルをインポートする

可能ですか?

答え1

いつでも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

答え2

セッションのすべての出力をキャプチャする方法は、新しいbashセッションを開始してログファイルに送信することです。単純なスクリプト以上のものを追跡するのに本当に便利です。

bash | tee ~/bash.log #bash セッションが終了するまで標準出力を保存します。
bash 2>&1 | bash 2>&1 | tee ~/bash.log # これは bash セッションが終了するまでエラーを含むすべての出力を保存します。

あるいは、直接スクリプトを書くこともできます。

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

答え3

使いたいティー

前任者:

echo "Hello World" | tee out.txt

これにより、コマンド出力を含むout.txtファイルが生成され、画面に印刷されます。ファイルに追加するには、「tee -a filename」を使用します。

echo "Hello" | tee -a out.txt
echo "World" | tee -a out.txt

out.txtにはHelloとWorldの2行があります(-aがない場合はworldのみがあります)。

スクリプト全体を保存してスクリプト全体を出力するには:

./script.sh | tee output.txt

関連情報