さまざまなコマンドを呼び出していくつかの出力(両方ともgit pull
などの呼び出されたコマンド自体から、およびOperation took XX minutes
などのスクリプト自体によって生成される有益なメッセージ)を出力するbashスクリプトを持っています。
出力全体をファイルにキャプチャしたいスクリプト自体から:基本的に、./myscript.sh > file.txt
をで呼び出さなくても済むようにしています-relevant-here理由。
基本的に私はこのようなことをしたいと思います:
startCapture
git pull
echo "Text"
other-command
endCapture
さらに、スクリプトの実行中に出力をシェルに出力する必要もあります。
最終的な目標は次のとおりです。
./myscript.sh
を実行するこれは可能ですか?
任意のセッションからのすべての出力をキャプチャするために私が見つけた方法は、新しいbashセッションを開始し、ログファイルにティーすることです。スクリプトだけでなく、それ以上の追跡に非常に役立ちます。
bash | tee〜/ bash.log #bashセッションが終了するまで標準出力を保存します bash | tee〜/ bash.log 2>&1 #bashセッションが終了するまで、エラーを含むすべての出力を保存します
または、自分でスクリプトをティーすることもできます
./myscript.sh | tee ./myscript.log #this will log only the output of the script.
tee を使用します。
例:
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
スクリプト内でいつでも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