10 Eylül 2020 Perşembe

bash yönlendirme - redirection

Giriş
bash redirection kelimesini bash yönlendirme olarak tercüme ettim. Yönlendirmese sayı ve operatör arasında boşluk olmamalı. Boşluk olursa ne olacağını gösteren bir örnek şöyle
[root@divinity test]# echo 0 > file.txt
[root@divinity test]# cat file.txt
0
[root@divinity test]# echo 0> file.txt

[root@divinity test]# cat file.txt

1. > yönlendirme
Açıklaması şöyle. Dosyayı truncate eder yani yeni baştan yaratır.
truncates the file to zero size, then writes;
Örnek
Açıklaması şöyle.
redirections are processed before the command is actually executed ...
Kural şöyle.
Never redirect to the file you are working on!
Elimizde şöyle bir kod olsun. Çıktı olarak boş dosya alırız çünkü önce file.txt boşaltılır. Daha sonra cat çalıştırılır. Dolayısıyla elimize boş dosya geçer.
cat file.txt | sed 's/a/1/' > file.txt
Örnek - Bir Dosyadan Okuyup Diğerine Yazma
Şöyle yaparız
somecommand < file1 > file2
Örnek - named pipe
Elimizde bir named pipe olsun. exec f'ten yani fifo'dan okur
$ mkfifo f; exec <f
Named pipe'a yazmak için şöyle yaparız. echo kapanırken named pipe'ı da kapatır.
$ echo ls > f
Aynı şeyi şöyle yaparsak
$ exec 3>f
$ echo ls >&3
2. >> yönlendirme - Appending Yönlendirme
Açıklaması şöyle. Dosyanın sonuna ekler.
doesn't truncate, it writes (appends) to the end of the file.
Örnek
Dosyanın başına eklemek için şöyle yapabiliriz. Önce date komutu çalışır, daha sonra dosya cat'lenir. Her ikisinin çıktısı file.new dosyasına yazılır. Daha sonra file.new file olarak taşınır.
{ date; cat file; } >file.new && mv file.new file
Çıktı olarak şunu alırız
Mon Aug 31 00:40:30 UTC 2020
Mon Aug 31 00:40:29 UTC 2020
Mon Aug 31 00:40:28 UTC 2020
Mon Aug 31 00:40:27 UTC 2020
3. &> yönlendirme - Standard Output,  Standard Error Birleştirme

4. &>> yönlendirme - Appending Standard Output  Standard Error Birleştirme
Bu sefer dosyaya append edilir.
Örnek
Şöyle yaparız. logfile'a sadece ekleme yapılır yeniden yaratılmaz ve hem stderr hem de stdout out.txt dosyasına yönlendirilir.
"command >> logfile 2>&1"

5. |> yönlendirme
noclobber (dosyaları ezmeme, overwrite yapmama) etkin olsa bile dosyanın üzerine yazar. Dosya ezmeme noclobber -C seçeneği ile etkinleştirilir.

-C seçeneği etkin iken
ls > out.txt
yaparsak out.txt dosyası mevcut ise değiştirilmez.

-C seçeneği etkin iken dosyaları ezmek için şöyle yaparız.
ls |> out.txt
6. <& yönlendirme
İki  tane input stream'i birleştirir. Burada bir örnek var.

Örnek
Açıklaması şöyle
if you really want to redirect standard input, while allowing writes, you can do so with the <> operator:
Şöyle yaparız
cat 0<> file.txt




Hiç yorum yok:

Yorum Gönder