Yanıtlar:
Bu durumda her iki yönlendirme yöntemi (> ve >>) arasında kavramanız gereken temel şey:
Yönlendirildiği bilgileri yönlendirir ve üzerine yazar . Bu, "|" borusundan herhangi bir bilgi alınırken olur
Yönlendirildiği bilgileri yönlendirir ve birleştirir . Bu, "|" borusundan herhangi bir bilgi alınırken olur
Her iki durumda da dosya yoksa, dosya oluşturulur. Aynı dosya üzerinde tekrar çalıştırırsanız, bilgiler yalnızca ">>" üzerinde birleştirilir. ">" İle ilk çalıştırmada yaptığınız her şeyin üzerine yazabilirsiniz.
Ancak çıktı dosyasıyla aynı girdi dosyasını kullanırken yapılan anlaşma. Bu durumda, ">" kullanırsanız, çıktı dosyasının "üzerine yazacağı" için "giriş" kısmının ayrıştırılması gereken bilgileri kaldırırsınız. Yani:
rev file.txt | cat > file.txt
"Ağır çekim açıklaması" nda gerçekte olan şey:
reviçeriğini tersine çevirmeye file.txtve boruya göndermeye hazırlarrevboruya bilgi gönderdiğinden, boru doğrudan akışları cat.catbilgilerini alıyorsa otomatik olarak uygulayacaktır file.txtonunla kuruldu.catrevtüm dosyanın oluşturulmasını beklemez . Bilgilerin ilk kısmının kendisine ulaştığı andan itibaren başlayacak, yani kullandığınız sembole bağlı olarak bir bağlantı açılacaktır file.txt.file.txtfile.txtfile.txtolan > , rev's işi yapmak ve çünkü hiçbir şey elde etmeye çalışacağını catyeni bilgiler için hazırlık silinen herşey.Peki diğerleri yukarıdakileri okuduktan sonra neden çalışıyor? Bu nedenle:
rev file.txt | cat > file2.txt && mv file.txt file2.txt
Burada, bilgiyi başka bir dosyaya gönderen kediye pipetleme yapıyorsunuz . Bu durumda, işlenen girdi dosyası file.txtçıktı dosyası ile aynı değildir file2.txt. Kelimenin tam anlamıyla bütün üzerine yazıyorsunuz Bundan sonra file2.txtbirlikte file.txtyapılan tüm süreç böylece, catsilindi. Temelde tüm satır basitleştirilebilir cp file.txt file2.txtçünkü aynı şeyi yapıyor çünkü file2.txtsonunda kaybediyor revve mvkomutla üzerine yazılıyor .
rev file.txt | cat >> file.txt
Bu durumda , bilgileri aynı dosyayla birleştirirsiniz . Bu yüzden sadece o dosyaya bir bağlantı açıyor, ancak tek bir > ile görüldüğü gibi bilgileri silmiyor . Sonuç, orijinal bilgiler artı tersine çevrilmiş bilgiler olmalıdır.
rev file.txt | cat --bogus-option > file.txtkedi de açmaya çalışmasa da dosyayı kesecektir.
moreutilsiçerir) sponge, özellikle bir giriş dosyası üzerine yazmak USECASE tasarlanmış bir araçtır. Örneğin, rev file.txt >file2.txt && mv file2.txt file.txtgeçici bir çözüm olur ve rev file.txt | sponge file.txtzaten adlandırılmış bir şey olsa bile düzgün çalışır file2.txt.
Kabuk yeniden yönlendirme gördüğünde, ilgili komutlardan herhangi birini yürütmeden önce ilgili dosyaları açar. Böylece, yaptığınız zaman:
foo file.txt | bar > file.txt
Daha öncefile.txt kısaltılmasına neden olan yönlendirme çalıştırılır ve okunabilir . Yan notta, bu yüzden yapamazsınız: foofile.txt
sed 'blah' file.txt > file.txt
Ve neden sedyerinde düzenleme seçeneği var?
Son olarak:
.. | cat > file.txt
olan kedinin bir işe yaramaz kullanımı sen okuma denemesinde, özellikle eğer öyleyse, file.txtdaha erken.
Bir dosyayı yerinde ters çevirmek istiyorsanız, kısayol yoktur . Yerinde düzenleme ile sedveya awkpüf noktalarını kullanabilirsiniz .
>çıktıyı başka bir şeye gönderen bir yönlendirici (operatör)
(bir sonraki komutun girişi, yazıcı ..)
Sizin durumunuzda çıktı bir dosyaya gider file.txt, eğer bu dosya zaten mevcutsa, üzerine yazılır, eğer oluşturulmamışsa.
>>bir ekleme operatörüdür, file.txtzaten varsa çıktı dosyanın sonuna eklenir. dosya yoksa, oluşturulur ve çıktı >(yeniden yönlendirici) ile aynı şekilde yeni dosyaya yazılır .
>ve >>operatörler.
Vim'i Ex modunda kullanabilirsiniz:
ex -sc '%!rev' -cx file.txt
% tüm satırları seç
! komutu çalıştır
x kaydet ve kapat
catbu gibi dışarı:rev file.txt > file2.txt && mv file2.txt file.txt. Bu gereksiz bir kullanımdırcat. Dışarıda bırakarak, ekstra bir süreç yumurtlamaya yedek.