コマンドの出力をファイルに保存するにはどうすればよいですか?
ソフトウェアを使用せずに方法はありますか? 私はどのように知りたいと思います。
コマンドの出力をファイルに保存するにはどうすればよいですか?
ソフトウェアを使用せずに方法はありますか? 私はどのように知りたいと思います。
はい、それは可能です、ちょうど出力をリダイレクトします(別名 stdout
)ファイルに:
SomeCommand > SomeFile.txt
または、データを追加したい場合:
SomeCommand >> SomeFile.txt
あなたがしたい場合 stderr
同様にこれを使用してください:
SomeCommand &> SomeFile.txt
またはこれを追加するには:
SomeCommand &>> SomeFile.txt
あなたは両方を持っているしたい場合 stderr
と出力 コンソールに表示されます と ファイル内の これを使用してください:
SomeCommand 2>&1 | tee SomeFile.txt
(出力のみが必要な場合は、 2
以上)
コマンドの出力をファイルに書き込むには、基本的に10の一般的に使用される方法があります。
以下の点に注意してください。
n.e.
構文列では、「存在しない」という意味です。
方法はありますが、列に収まるには複雑すぎます。 あなたはそれについてのリストセクションに役立つリンクを見つけることができます。
|| visible in terminal || visible in file || existing Syntax || StdOut | StdErr || StdOut | StdErr || file ==========++==========+==========++==========+==========++=========== > || no | yes || yes | no || overwrite >> || no | yes || yes | no || append || | || | || 2> || yes | no || no | yes || overwrite 2>> || yes | no || no | yes || append || | || | || &> || no | no || yes | yes || overwrite &>> || no | no || yes | yes || append || | || | || | tee || yes | yes || yes | no || overwrite | tee -a || yes | yes || yes | no || append || | || | || n.e. (*) || yes | yes || no | yes || overwrite n.e. (*) || yes | yes || no | yes || append || | || | |||& tee || yes | yes || yes | yes || overwrite|& tee -a || yes | yes || yes | yes || append
command > output.txt
標準出力ストリームはファイルにのみリダイレクトされ、端末には表示されません。 ファイルが既に存在する場合は、上書きされます。
command >> output.txt
標準出力ストリームはファイルにのみリダイレクトされ、端末には表示されません。 ファイルが既に存在する場合、新しいデータはファイルの末尾に追加されます。
command 2> output.txt
標準エラーストリームはファイルにのみリダイレクトされ、端末には表示されません。 ファイルが既に存在する場合は、上書きされます。
command 2>> output.txt
標準エラーストリームはファイルにのみリダイレクトされ、端末には表示されません。 ファイルが既に存在する場合、新しいデータはファイルの末尾に追加されます。
command &> output.txt
標準出力と標準エラーストリームの両方がファイルにのみリダイレクトされ、端末には何も表示されません。 ファイルが既に存在する場合は、上書きされます。
command &>> output.txt
標準出力と標準エラーストリームの両方がファイルにのみリダイレクトされ、端末には何も表示されません。 ファイルが既に存在する場合、新しいデータはファイルの末尾に追加されます。.
command | tee output.txt
標準出力ストリームはファイルにコピーされますが、端末ではまだ表示されます。 ファイルが既に存在する場合は、上書きされます。
command | tee -a output.txt
標準出力ストリームはファイルにコピーされますが、端末ではまだ表示されます。 ファイルが既に存在する場合、新しいデータはファイルの末尾に追加されます。
(*)
Bashには、StdErrのみを2番目のコマンドにパイプすることを可能にする速記構文はありません。 tee
再びテーブルを完成させる。 あなたが本当にそのようなものが必要な場合は、見てください "Stdoutではなくstderrをパイプする方法は?"スタックオーバーフローについて ストリームを交換したり、プロセス置換を使用したりすることによって、これをどのように行うことができるかについては、いくつかの方法があります。
command |& tee output.txt
標準出力と標準エラーストリームの両方がファイルにコピーされますが、端末では表示されます。 ファイルが既に存在する場合は、上書きされます。
command |& tee -a output.txt
標準出力と標準エラーストリームの両方がファイルにコピーされますが、端末では表示されます。 ファイルが既に存在する場合、新しいデータはファイルの末尾に追加されます。
また、以下を使用することもできます tee
出力をファイルに送信するには:
command | tee ~/outputfile.txt
わずかな変更はstderrもキャッチします:
command 2>&1 | tee ~/outputfile.txt
またはわずかに短く、より少なく複雑:
command |& tee ~/outputfile.txt
tee
あなたができるようにしたい場合に便利です コマンド出力をキャプチャしながら、ライブでも表示します.
コマンド出力をファイルにリダイレクトできます:
your_command >/path/to/file
コマンド出力を上書きせずにファイルに追加するには、次のコマンドを使用します:
your_command >>/path/to/file
考慮すべき機能強化 -
様々なスクリプトは、あなたのログファイルを乱雑にしたくないかもしれない出力にカラーコードを注入します。
これを修正するには、プログラムを使用できます sed それらのコードを取り除くために。 例:
command 2>&1 | sed -r 's/'$(echo -e "\033")'\[[0-9]{1,2}(;([0-9]{1,2})?)?[mK]//g' | tee ~/outputfile.txt
ここには2つの異なる質問があります。 最初はタイトルにあります:
端末出力をファイルに保存するにはどうすればよいですか?
第二の質問は、体内にあります:
コマンドの出力をファイルに保存するにはどうすればよいですか?
ここに投稿されたすべての回答は2番目の質問に対応していますが、最初の質問には対応していません。 Unix&Amp;Linux:
この回答は、あまり知られていないコマンドを使用しています script
入力するまで、シェルのすべての出力をテキストファイルに保存します exit
. コマンドの出力はまだ画面に表示されますが、 テキストファイルにも表示されます.
プロセスは簡単です。 使用:
$ script ~/outputfile.txtScript started, file is /home/rick/outputfile.txt$ command1$ command2$ command3$ exitexitScript done, file is /home/rick/outputfile.txt
その後、コマンドのあなたの記録された出力を見て1,2&アンプ;3と:
cat ~/outputfile.txt
これは次のようになります 以前の答え の:
command |& tee ~/outputfile.txt
|& tee ~/outputfile.txt
それぞれの後 commnd
.script
コマンドは、リロードの利点(または欠点)を追加しました ~/.bashrc
それが始まるとき。script
コマンドは、コマンドプロンプトを表示します($PS1
)入力したコマンドの後に続けて入力します。script
コマンドは、フルカラーですべての詳細を記録します。のために cron
あなたはBashの拡張機能を避けたいと思っています。 同等のPOSIX sh
リダイレクト演算子は次のとおりです
Bash POSIX------------ --------------foo &> bar foo >bar 2>&1foo &>> bar foo >>bar 2>&1foo |& bar foo 2>&1 | bar
POSIX機能はある意味ではより単純で簡単であることに気付くでしょう。 その &>
構文はから借用されました csh
それはすでにそれが悪い考えであることをあなたに納得させるはずです。
some_command | tee command.log
と some_command > command.log
彼らはにコマンド出力を保存しないという問題を抱えています command.log
リアルタイムのファイル。
この問題を回避し、コマンド出力をリアルタイムで保存するには、次のように追加します unbuffer
、付属しています expect
パッケージ。
例:
sudo apt-get install expectunbuffer some_command | tee command.logunbuffer some_command > command.log
と仮定すると log.py
含まれています:
import timeprint('testing')time.sleep(100) # sleeping for 100 seconds
あなたは実行することができます unbuffer python log.py | tee command.log
または unbuffer python log.py > command.log
より多くの情報: コマンド出力をリアルタイムでファイルに保存するにはどうすればよいですか?
コマンドの実行中にファイルに出力する場合:
script -c ./path/to/executable.bash -f log.txt