1768

標準出力を Bash の切り捨てられたファイルにリダイレクトするには、次を使用することを知っています。

cmd > file.txt

Bashで標準出力をリダイレクトしてファイルに追加するには、次を使用することを知っています。

cmd >> file.txt

標準出力と標準エラーの両方を切り詰められたファイルにリダイレクトするには、次を使用することを知っています。

cmd &> file.txt

ファイルに追加する標準出力と標準エラーの両方をリダイレクトするにはどうすればよいですか? cmd &>> file.txt私にはうまくいきませんでした。

4

8 に答える 8

2286
cmd >>file.txt 2>&1

Bash は、次のように左から右にリダイレクトを実行します。

  1. >>file.txt:file.txt追加モードで開き、そこにリダイレクトしますstdout
  2. 2>&1: 「現在の行き先」にリダイレクトstderrします。この場合、それは追加モードで開かれたファイルです。つまり、現在使用しているファイル記述子を再利用します。stdout&1stdout
于 2009-05-18T04:23:16.287 に答える
407

これを行うには、Bashのバージョンに応じて2つの方法があります。

古典的でポータブルな(Bash pre-4)方法は次のとおりです。

cmd >> outfile 2>&1

Bash 4から始まる、移植性のない方法は次のとおりです。

cmd &>> outfile

(アナログ&> outfile

優れたコーディングスタイルを得るには、

  • 移植性が懸念事項であるかどうかを判断します(その後、従来の方法を使用します)
  • Bash pre-4への移植性が懸念事項であるかどうかを判断します(その後、従来の方法を使用します)
  • どの構文を使用する場合でも、同じスクリプト内で構文を変更しないでください(混乱!)

スクリプトがすでにで始まって#!/bin/shいる場合(意図されているかどうかに関係なく)、Bash 4ソリューション、および一般的にはBash固有のコードは適切ではありません。

また、Bash 4&>>は構文が短いだけであり、新しい機能などは導入されていないことにも注意してください。

構文は(他のリダイレクト構文のほかに)Bashhackerswikiで説明されています。

于 2009-05-18T04:42:13.683 に答える
102

Bash では、別のファイルへのリダイレクトを明示的に指定することもできます。

cmd >log.out 2>log_error.out

追加は次のようになります。

cmd >>log.out 2>>log_error.out
于 2013-07-24T18:09:45.047 に答える
74

これはうまくいくはずです:

your_command 2>&1 | tee -a file.txt

すべてのログをfile.txtに保存し、ターミナルにダンプします。

于 2015-12-12T06:17:38.270 に答える
69

Bash 4 (およびZ shell ( zsh) 4.3.11) の場合:

cmd &>> outfile

箱から出してすぐ。

于 2012-03-27T18:24:48.073 に答える
27

これを試して:

You_command 1> output.log  2>&1

の使用は&> x.fileBash 4 で機能します。申し訳ありません: (

ここにいくつかの追加のヒントがあります。

0、1、2、...、9 は bash のファイル記述子です。

0 は標準入力、1 は標準出力、2 は標準エラーを表します。3~9は他の一時的な使用のために予備です。

>演算子または>>(追加)を使用して、任意のファイル記述子を他のファイル記述子またはファイルにリダイレクトできます。

使用法: < file_descriptor > > < filename | &file_descriptor >

Chapter 20. I/O Redirectionのリファレンスを参照してください。

于 2014-04-10T05:56:00.840 に答える