Genellikle kabul edilen cevaplarda açıklanan tekniği kullanırım:
diff <(ls old) <(ls new)
ama genellikle yukarıdaki örnekten çok daha karmaşık komutlarla kullandığımı görüyorum. Bu gibi durumlarda, diff komutunun oluşturulması can sıkıcı olabilir. Başkalarının yararlı bulabileceği bazı çözümler buldum.
Zaman zaman% 99'unu diff çalıştırmadan önce ilgili komutları denediğimi anlıyorum. Sonuç olarak, yaymak istediğim komutlar tarihçemde tam orada ... neden kullanmıyorsunuz?
Son iki komutu yerine getirmek için Fix Command (fc) bash komutunu kullanıyorum:
$ echo A
A
$ echo B
B
$ diff --color <( $(fc -ln -1 -1) ) <( $(fc -ln -2 -2 ) )
1c1
< B
---
> A
Fc bayrakları:
-n : Numara yok. Listeleme sırasında komut numaralarını gizler.
-l : Liste: Komutlar standart çıktıda listelenmiştir.
bu -1
-1
, tarihteki başlangıç ve bitiş konumlarına atıfta bulunur; bu durumda, son komuttan, yalnızca son komutu veren son komuta kadar.
Son olarak $()
, komutu bir alt kabukta çalıştırmak için bunu sarıyoruz.
Açıkçası bu, biraz takma addır, bu yüzden bir takma ad oluşturabiliriz:
alias dl='diff --color <( $(fc -ln -1 -1) ) <( $(fc -ln -2 -2 ) )'
Veya bir fonksiyon yaratabiliriz:
dl() {
if [[ -z "$1" ]]; then
first="1"
else
first="$1"
fi
if [[ -z "$2" ]]; then
last="2"
else
last="$2"
fi
# shellcheck disable=SC2091
diff --color <( $(fc -ln "-$first" "-$first") ) <( $(fc -ln "-$last" "-$last") )
}
hangi kullanmak için tarih satırlarının belirlenmesini destekler. İkisini de kullandıktan sonra, takma adı tercih ettiğim sürüm buluyorum.