通常、次のように書く。
diff file1 file2
しかし、ファイルをコマンドの出力と比較したいです(ここではコマンドを簡単にします)。
diff file1 <(cat file2 | sort)
さて、シェルプロンプトでこれを手動で入力するとうまくいきますが、シェルスクリプトに同じ行を入れてからスクリプトを実行するとエラーが発生します。
だから質問は – これを正しく行う方法は?
もちろん、出力を一時ファイルに書き込むのを避けたいです。
答え1
あなたのスクリプトとシェルが異なるようです。たぶん#!/bin/sh
スクリプトの上部にインタプリタとして持っていますが、bash
プライベートシェルとして使用しているかもしれません。を実行して、端末で実行されているシェルを確認できますecho $SHELL
。
これを行うより簡単な方法(ほとんどのシェルで動作します)は、指定したファイル読み取り演算子の代わりにパイプリダイレクトを使用することです。 「-」記号はSTDINを読み取る標準命名法であり、パラメータリストのファイル名を置き換えるためによく使用されます。
cat file2 | sort | diff file1 -
または避けるために猫の無駄な使用:
sort < file2 | diff file1 -
答え2
標準入力の範囲はスクリプト自体なので、次のようにコードをブロックに入れます。
{
diff file1 <(sort file2)
}
これにより、STDINの範囲がブロック内にあります。
私はそれを試してみました。