回答:
<(command)
あるコマンドの出力をファイル名のように別のプログラムに渡すために使用します。bashはプログラムの出力をパイプにパイプし、ファイル名/dev/fd/63
を外部コマンドに渡します。
diff <(./a) <(./b)
同様に、>(command)
何かをコマンドにパイプしたい場合にも使用できます。
これは、Bashのmanページでは「Process Substitution」と呼ばれています。
-bash: syntax error near unexpected token ('
。括弧なしでもう一度試してみました-bash: java: No such file or directory
。コマンドにパラメーターがある場合は機能しませんか?
alias diffcmd bash -c \'diff \<\(sh -c \!:1\) \<\( sh -c \!:2 \)\'
。(次に、例:diffcmd "ls" "ls -a")。
fseek
、zshは=(./a)
同じように使用でき<(./a)
ますが、フードの下で一時ファイルを使用します。一時ファイルはzshによって削除されます。)
両方の答えに加えて、並べて比較を表示したい場合は、次を使用しますvimdiff
。
vimdiff <(./a) <(./b)
このようなもの:
vimdiff
美しく、スマートでインタラクティブな違い比較ビューを作成します。vim
ほとんどのシステムではパッケージに付属しているようです。
vimdiff
は、異なる行だけでなく、異なる特定のテキストフラグメントも示しています。
1つのオプションは、名前付きパイプ(FIFO)を使用することです。
mkfifo a_fifo b_fifo
./a > a_fifo &
./b > b_fifo &
diff a_fifo b_fifo
...しかし、John Kugelmanのソリューションはよりクリーンです。
rm a_fifo b_fifo
ます。
すでに良い答えにもう少し追加(助けてくれました!):
コマンドはdocker
、ヘルプをSTD_ERR
ファイル記述子2に出力します。
私はかどうかを確認したかったdocker attach
とdocker attach --help
同じ出力を与えました
$ docker attach
$ docker attach --help
これら2つのコマンドを入力しただけで、次のことを行いました。
$ diff <(!-2 2>&1) <(!! 2>&1)
!! これは!-1と同じです。つまり、このコマンドの前にコマンド1を実行します-最後のコマンド
!-2は、このコマンドの2つ前にコマンドを実行することを意味します
2>&1は、file_descriptor 2出力(STD_ERR)をfile_descriptor 1出力(STD_OUT)と同じ場所に送信することを意味します
これが役立つことを願っています。
zshの場合、を使用=(command)
すると、一時ファイルが自動的に作成され=(command)
、ファイル自体のパスに置き換えられます。通常のプロセス置換で$(command)
は、コマンドの出力に置き換えられます。
このzsh機能は非常に便利であり、Beyond Compareなどのdiffツールを使用して2つのコマンドの出力を比較するためにこのように使用できます。
bcomp =(ulimit -Sa | sort) =(ulimit -Ha | sort)
ビヨンドのために、あなたが使用しなければならないことに注意してください比較bcomp
上記(代わりのためbcompare
以来)bcomp
進水比較して待機し、それが完了するのを。を使用するとbcompare
、比較が開始され、コマンドの出力を保存するために作成された一時ファイルが消えるため、すぐに終了します。
詳細はこちら:http : //zsh.sourceforge.net/Intro/intro_7.html
これにも注意してください:
シェルは一時ファイルを作成し、コマンドが完了するとそれを削除することに注意してください。
そして、の間の差であるとして、次の$(...)
と=(...)
:
zshのマニュアルページを読むと、<(...)が=(...)に類似した別の形式のプロセス置換であることがわかります。2つの間に重要な違いがあります。<(...)の場合、シェルはファイルの代わりに名前付きパイプ(FIFO)を作成します。ファイルシステムがいっぱいにならないため、これはより良い方法です。ただし、すべての場合で機能するわけではありません。実際、上記の例で=(...)を<(...)に置き換えた場合、fgrep -f <(...)を除いて、すべてが機能しなくなります。パイプを編集したり、メールフォルダーとして開いたりすることはできません。ただし、fgrepでは、パイプから単語のリストを読み取ることは問題ありません。foo |ので、なぜdiff <(foo)barが機能しないのか疑問に思われるかもしれません。diff-バーは機能します。これは、diffが引数の1つが-であることに気付いた場合に一時ファイルを作成し、標準入力を一時ファイルにコピーするためです。