Aynı dosyaya yeniden yönlendirme dosyayı neden kesiyor?


11

Normalde çıkışı yeniden yönlendirmek için farklı bir dosya kullanırız.

Örneğin :

cat < first > temp

Bu komutta, ilkinin içeriği standart çıktı yerine temp'e yönlendirilir.

Öyleyse aynı dosya adını kullanırsam dosya neden kesiliyor?

Neden aynı dosyanın üzerine yazamıyor?

cat < first > first 

Yanıtlar:


19

G / Ç yönlendirmesini bu şekilde kullandığınızda, hem "giriş" hem de "çıktı" dosyası komut yürütülmeden önce kabuk tarafından açılır . Üzerine yazmak için bir dosyayı açmak, yazmadan önce kesilmesi ile aynıdır. Sonuç: catgirişte boş bir dosya görüyor ...


0

Çünkü genel durumda ele almak çok karmaşık olurdu. Aşağıdaki örneği düşünün:

Bir program bir dosyayı satır satır okur ve her satırı iki kez çıkarır. Şimdi bunun ikinci bir dosya olmadan (yani aynı dosyada) çalışması için, programın okuyacağı satırların çoğunu (tümünü) arabelleğe alması gerekir, çünkü okunmadan önce üzerine yazılırlar.

Konuları tutmak için basit programlar genellikle bittikten sonra orijinalin üzerinde hareket ettikleri ikincil, geçici bir dosya kullanırlar. Bu, örneğin sed -i(satır içi) nasıl çalışır.


0

Tipik olarak bu durumda yeniden yönlendirme sözdizimi olmalıdır cat first > temp. Bu, cat'nin çıktısının. firstDosyasına gönderildiği anlamına gelir temp. İfadeniz durumunda cat < first > temp, çıktı cattekrar yeniden yönlendirildiği sırada tamamlanmadı. Hiçbir şey sonuç vermiyor.

Ancak catbir dosyayı ve çıktıyı başka bir dosyaya yönlendirmek temelden farklı değildir cp.


cat < first > tempgayet iyi çalışıyor.
JanC
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.