Zwykle piszesz:
diff file1 file2
Ale chciałbym różnicować plik i dane wyjściowe z polecenia (tutaj robię polecenie trywialnym):
diff file1 <(cat file2 | sort)
Ok, to działa, gdy wprowadzę to ręcznie w wierszu poleceń powłoki, ale kiedy wstawię dokładnie ten sam wiersz w skrypcie powłoki, a następnie uruchomię skrypt, pojawia się błąd.
Pytanie brzmi: jak to zrobić poprawnie?
Oczywiście chciałbym uniknąć zapisywania danych wyjściowych do pliku tymczasowego.
źródło
-R
w przypadku użyciagit diff --no-index
diff - file1
.git diff
.git diff
jest zupełnie inną bestią i działa na odniesieniach do obiektów globu w swoim wewnętrznym indeksie, a nie w plikach;diff
działa na systemie plików.-
Składnia jest po prostu zapłacić za cukier syntaktyczny/dev/stdin
, pliku reprezentującego strumienia stdin. Dlatego dlaczegodiff
można go używać jako zamiennika nazwy pliku. Tymczasemgit diff
nie szuka plików, szuka obiektów, więc musisz przekazać coś, co rozpoznaje. Nie używaj go do porównywania plików, użyjdiff
do tego.Zakres standardowego wejścia to sam skrypt, więc po prostu umieść swój kod w blocku w następujący sposób:
W ten sposób zakres STDIN znajduje się w bloku.
Próbowałem i to działa.
źródło
<(…)
konstrukcji. Twój skrypt będzie działał, czy nie, w zależności od tego, czy uruchomisz go w powłoce, która obsługuje,<(…)
czy nie (ksh93 / bash / zsh vs Bourne / ash / kshk88). Odpowiedź Caleba to wszystko.