Borular farklılaşamaz mı?


74

Zeki olmak ve uzaktaki bir dosyayı önce elle indirmeden yerel bir dosyayla karşılaştırmak istedim. Uzak dosyanın içeriğini alabilirim

ssh user@remote-host "cat path/file.name"

Ancak, bunu diff

ssh user@remote-host "cat path/file.name" | diff path/file.name

bana bunu veriyor:

diff: missing operand after `path/file.nae'
diff: Try `diff --help' for more information.

Ayarlanmış ssh anahtarlarım var, bu yüzden beni bir şifre sormuyor. Bunun için bir geçici çözüm nedir?


5
Bu arada, bunu yaptığınızda hala dosyayı indiriyorsunuz (içeriği SSH bağlantısı üzerinden gönderildiğinden), hiçbir yerde kaydetmiyorsunuz. Yani herhangi bir bant genişliğini ya da herhangi bir şeyi kaydettiğiniz gibi değil.
David Z,

2
Evet, sadece dosya sistemimi tıka basa dolanıp tek seferlik dosyalarla doldurmak istemiyorum.
kullanıcı394

1
çünkü komut stdin'i desteklemediğinde (örn. üzerinden -), kullanabilirsiniz /dev/stdin. örneğindiff file1 /dev/stdin
ctrl-alt-delor

Yanıtlar:


92

-Standart girişi temsil etmeyi deneyin .

ssh user@remote-host "cat path/file.name" | diff path/file.name -


dev dosyaları karşılaştırırken (örneğin linux disk görüntüleri) bu, hepsini konsola veriyor! diff -s ile bile ("aynı" için) bunu yapar.
user391339

65

İşte bir geçici çözüm: diff<( expr ) 'ı tartışmacı olarak kabul ediyor gibi görünüyor :

diff <(ssh \"cat path/file.name/") <(cat path/file.name)

17
Bu fark değildir, kabuktur (bash, ksh ve zsh bu sözdizimini destekler, ancak POSIX değildir), çekirdekten biraz yardım alarak (sağlamalıdır /dev/fd: komut satırında olduğu diffgibi bir şey görür /dev/fd/3).
Gilles,

3
Bu "sağlamalıdır" - kabukları da bu özellik için geçici adlandırılmış borular oluşturabilir.
efemient

3
bu en havalı cevap!
neves

6
Ben şahsen bu cevabı tercih ederim. İki farklı XML dosyasını dağıtmam gerekiyordu; ama önce düzgün bir şekilde oluşturulmaları gerekiyordu. Bu, buna yol açtı: diff -y <(xmllint --format "${1}") <(xmllint --format "${2}")şimdi her zaman kullanıyorum.
Paul Nelson Baker

Bu aynı zamanda iki ikili .plist dosyasını karşılaştırmak isteyebileceğiniz OS X'te çok kullanışlıdır:diff <(plutil -convert xml1 -o -- "${1}") <(plutil -convert xml1 -o - -- "${2}")
morgant

4

Diff içine borulama koşmaya eşdeğerdir

diff path/file.name

ve sonra, bir kez çalışıyorsa, dosyanın tüm içeriğini yazarak.

Gördüğünüz gibi, beklediğiniz bu değildi.


Geçici çözüm yok mu? :(
user394

1
Hemant'ın cevabına bak. Bir tane bilmiyordum.
Macha

1
diff /tmp/localtempfile <(ssh -A -o StrictHostKeyChecking=no root@server "cat /tmp/remotetempfile")

Güvenliğinin azaltılmasında ne var StrictHostKeyChecking=no? Aksi takdirde iyi bir cevap.
ctrl-alt-delor
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.