İki komutun çıkışını nasıl ayırt edebilirim?

132

İki benzer dizinin içeriğini karşılaştırmanın en basit yolunun

gibi bir şey olacağını hayal etmiştim

diff 'ls old' 'ls new'

Fakat bunun neden işe yaramadığını görüyorum; diff , umduğum gibi iki akış yerine, komut satırındaki büyük ve uzun bir dosya listesini veriyor. İki çıkışı doğrudan dif'e nasıl geçiririm?

    
sordu Ternary 15.12.2012 23:01

3 cevap

194

Komutun yerine koyma '…' komutun çıktısını komut satırına koyar, bu yüzden diff 'si her iki dizindeki dosya listesini argüman olarak görür. İstediğiniz şey, komut satırında iki dosya adını görmek için diff dosyasıdır ve bu dosyaların içeriğinin dizin listeleri olmasını sağlayın. Bu, işlemin yerine koyması ’nın yaptığı şeydir.

diff <(ls old) <(ls new)

diff 'ye olan argümanlar /dev/fd/3 ve /dev/fd/4 gibi görünecek: bash tarafından oluşturulan iki boruya karşılık gelen dosya tanımlayıcılarıdır. % Co_de% bu dosyaları açtığı zaman, her bir borunun okuma tarafına bağlanır. Her bir borunun yazma tarafı diff komutuna bağlanır.

    
verilen cevap Gilles 15.12.2012 23:06
2

Balık kabuğu

Balık kabuğunda, psub 'a girmeniz gerekir. Burada, Ötünme Ötesi ile heroku ve dokku config karşılaştırmasının bir örneği verilmiştir:

bcompare (ssh [email protected] dokku config myapp | sort | psub) (heroku config -a myapp | sort | psub)
    
verilen cevap WooYek 12.04.2018 09:34
1

zsh için, =(command) değerini kullanarak otomatik olarak geçici bir dosya oluşturur ve =(command) 'i dosyanın yolunun kendisi ile değiştirir. Komut Değiştirme ile, $(command) komutu çıkışı ile değiştirilir.

Yani üç seçenek var:

  1. Komut Değiştirme: $(...)
  2. İşlem Değişikliği: <(...)
  3. zsh Aromalı Proses Değiştirme: =(...)

zsh aromalı proses sübvansiyonu # 3 çok kullanışlıdır ve bir dif aracı kullanarak iki komutun çıktısını karşılaştırmak için kullanılabilir, örneğin Beyond Compare:

bcomp  =(ulimit -Sa | sort) =(ulimit -Ha | sort)

Karşılaştırma Ötesi için, bcomp karşılaştırmayı başlattığından ve beklemeden olduğundan, bcompare 'yi yukarıdakiler için kullanmanız gerektiğini unutmayın ( bcomp yerine). % Co_de% kullanırsanız, bu karşılaştırma başlatır ve komutların çıktısını depolamak için oluşturulan geçici dosyaların kaybolması nedeniyle hemen çıkar.

Daha fazla bilgi edinin: İşte

Ayrıca bunu fark edin:

  

Kabuğun geçici bir dosya oluşturduğunu ve komut bittiğinde onu siler.

ve zsh (i.e # 2 ve # 3) tarafından desteklenen iki tür Süreç ikamesi arasındaki fark olan aşağıdaki gibidir:

  

zsh'in man sayfasını okursanız, & lt; (...) 'nin, (=) ile benzer bir başka işlem değiştirme şekli olduğunu fark edebilirsiniz. İkisi arasında önemli bir fark var. & Lt; (...) durumunda, kabuk bir dosya yerine adlandırılmış bir boru (FIFO) oluşturur. Bu daha iyidir, çünkü dosya sistemini doldurmaz; ama her durumda işe yaramıyor. Aslında, yukarıdaki örneklerde = (...) 'i, (lt) ile değiştirmiş olsaydık, hepsi fgrep -f & lt; (...) dışında çalışmayı durduracaktır. Bir boruyu düzenleyemez veya posta klasörü olarak açamazsınız; Bununla birlikte, fgrep, bir borudan sözcüklerin bir listesini okumakta sorun yaşamaz. Neden diff (lt) çubuğunun işe yaramadığını merak edebilirsiniz. diff - bar işleri; Bunun sebebi, eğer argümanlarından birinin - ve sonra standart girdisini geçici dosyaya kopyalarsa - fark ederse, geçici bir dosya yaratmasıdır.

Referans: İşte

    
verilen cevap Ashutosh Jindal 29.06.2018 10:59

Etiketlerdeki diğer soruları oku