1

bash に一連のパイプ コマンドがあるとします。

mysqldump mydatabase  |   head -1100   | tail -n 100   

それを1つのコマンドとして扱う正しい/最良の方法は何ですか。出力をキャプチャできます。

コマンドをバッククォートで囲んでみました (私が理解しているように、不要な新しいシェルが開きます) が、エラーが発生しました。

`mysqldump mydatabase  |   head -1100   | tail -n 100 ` > output.txt  


error mysqldump: Got errno 32 on write

エラーが bash コマンドまたは mysql に関連しているかどうかはわかりません (バッククォートを追加する前は機能していました)。

とにかく、パイプされたコマンドを1つ/グループ化してキャプチャする方法にもっと興味があります。

4

3 に答える 3

2

左側のコマンドの stdout は、右側のコマンドの stdin として機能しているため、機能するmysqldump mydatabase | head -1100 | tail -n 100 > output.txtはずです。

本当に「明確にする」のであれば、これでうまくいくはずです。 ( mysqldump mydatabase | head -1100 | tail -n 100 ) > output.txt

于 2013-10-10T09:03:51.773 に答える
2

行内の各コマンドは入力を受け取り、出力を返すため、データが渡されるチェーンのように見えます。

結果をコンソールに表示したい場合は、次のように記述します

mysqldump mydatabase | head -1100 | tail -n 100

それ以外の場合は、出力をファイルにリダイレクトします。

mysqldump mydatabase | head -1100 | tail -n 100 > output.txt

リダイレクトに関する詳細情報

于 2013-10-10T09:06:44.143 に答える
1

Instead of creating two pipes you can use sed to find sections of line numbers

    mysqldump mydatabase | sed -n '1000,1100p' > output.txt
于 2013-10-10T09:12:59.537 に答える