一つのコマンドとしてのパイプを参照してください。
これは私がパイプそれらを一緒にするとき、それは2つのコマンドを出力することを除いて、正常に動作します:
bzip2 -dc < dump.sql.bz2 | mysql test
プリント:
$ bzip2 -dc < dump.sql.bz2 $ mysql test
私はtrap
またはに何らかの変更を加えることができますラインが1つとして印刷されるようにパイプとライン?
一つのコマンドとしてのパイプを参照してください。
これは私がパイプそれらを一緒にするとき、それは2つのコマンドを出力することを除いて、正常に動作します:
bzip2 -dc < dump.sql.bz2 | mysql test
プリント:
$ bzip2 -dc < dump.sql.bz2 $ mysql test
私はtrap
またはに何らかの変更を加えることができますラインが1つとして印刷されるようにパイプとライン?
:代わりにパイプラインの
process substitutionを使用してmysql test < <(bzip2 -dc < dump.sql.bz2)
は、コマンドにDEBUG
トラップの粒度のレベルと内蔵されバッシュの視点からシンプルコマンドを作ります$BASH_COMMAND
で可変動作します。
背景:
$BASH_COMMAND
がそうであるように設計することによりDEBUG
(擬似)信号は、単純コマンドのレベルで動作します。
bzip2 -dc < dump.sql.bz2 | mysql test
は複数簡単なコマンドのを構成パイプラインです。
したがって、trap
ステートメントはパイプラインを使用して必要な処理を実行できません。
化合物コマンドを使用して、あなたが望むものを得るために最も近いもの(例えば、while
ループまたはコマンド・グループ({ ...; ...; }
)または(単純なコマンドまたはパイプラインは、オペレータ; && || &
と結合コマンドリスト)を使用することですそれが実行される前stderrのにコマンド全体をエコーset -v
、が、私は、この出力のをフォーマットを制御する方法を知っているだろう
粗製の回避策は、このように、機能を使用することになります。
はrun() { eval $1; }
trap 'echo -e "\e[92m$ $BASH_COMMAND\e[0m"' DEBUG
run "bzip2 -dc < dump.sql.bz2 | mysql test"
出力:
$ run "bzip2 -dc < dump.sql.bz2 | mysql test"
bashは*パイプラインを知って*いるでしょうか?配管をある種のツールに委譲することはできないので、bashの観点からは単一のコマンドです。 – AndreKR
パイプラインを_function_の内側に置くことができ、その関数の呼び出しはBashの観点から_simple_コマンドになりますが、実際のパイプラインも隠されます。 – mklement0
ファイル名は受け付けませんが、 'mysql test <(bzip2 -dc
AndreKR