> Ve | arasındaki fark / dev / tty ile


3

Bu komutu çalıştırdığımda:

echo "1" > /dev/tty # runs successfully 

ama bunu çalıştırdığımda:

echo "1" | /dev/tty #permission denied

Bu iki operatörler arasındaki fark nedir >ve |neden boru hataya neden olur?

Yanıtlar:


11

Kısa cevap: > önce bir dosya adı veya &n(n bir sayıdır) |yazmalı ve ardından başka bir komut çağrısı takip etmelidir.


Ayrıntılar: Kabuk sözdiziminde, bazı komutlara yapılan çağrı birkaç bileşen içerir. Örnek:

A=foo 2>/dev/null B=bar cmd arg1 arg2 >file 3>&4 arg3

Burada, parametreler 2>/dev/null, >fileve 3>&4(Çıkışsız içeren özel parametrelerdir >¹), bunlar io-yönlendirmeleri kurmak için kullanılır ve her yerde komut satırında görünebilir. Filedesciptor 2 yönlendirilir /dev/null, filedescriptor 1(örtük) yönlendirilir fileve filedescriptor 3, filedescriptor 4'ün bağlandığı yere yönlendirilir.

Daha sonra, kalan parametreler arasında A=foove B=bariçerdiğinden =komut adı olarak kabul edilmezler: başlatılacak olan sürecin çevre değişkenlerine özel değerler verirler.

Sonra komut gelir cmdve reel argümanlar: arg1, arg2, arg3.

Pipo |, bir komut çağrısının parçası değil, bu iki yayını birbirine bağlar. Örnek:

CC=gcc make 2>&1 | LESS=--quit-at-eof less

İlk işlem tarafından dosya tanıtıcısı 1'deki çıktı, ikinci işlem tarafından dosya tanıtıcısı 0'daki girdi olarak, bir arabellek gibi davranan bir "boru" yoluyla alınır.

-
1. Aslında, gibi özel karakterler >bazen bir boşluk tarafından izlenir. Buna izin verilmesine rağmen, iki (boşlukla ayrılmış) dizenin tek bir 'varlık' olarak anlaşılması gerekir.


6

|İse işlemler arasındaki boru veri sağlamak için kullanılır >, bir dosya için bir akışı yeniden yönlendirmek için kullanılır. /dev/ttyroot'un sahip olduğu bir "file" / cihazdır ve izin vermesi sonucunda kabuğunuzun / dev / tty komutunu çalıştırmaya çalıştığı ve buna izin vermediği için izinleri 666 olarak ayarlanmıştır.

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.