さまざまなコマンドを呼び出していくつかの出力を印刷するbashスクリプトがあります(たとえば、独自に呼び出されるコマンドとスクリプト自体git pull
によって生成された情報メッセージの両方Operation took XX minutes
)。
出力全体をファイルにキャプチャしたいです。スクリプト自体から./myscript.sh | tee file.txt
:基本的に電話をかける必要がないようにしたいです。ここでは関係ありません理由。
基本的に私は次のことをしたいと思います。
startCapture
git pull
echo "Text"
other-command
endCapture
また、スクリプトの実行中に出力をシェルに印刷する必要があります。
究極の目標は次のとおりです。
./myscript.sh
実行に追加のシェル構造は必要ありません。- 今やっているように端末の出力を見てください。
- フル出力を含むディスクにファイルをインポートする
可能ですか?
答え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