it-swarm-tr.com

Dosya adı yerine tire (-) kullanımı

Bir komut için, - dosya adı yerine bağımsız değişken olarak STDIN veya STDOUT anlamına gelir.

  1. Ancak bu örnekte, -:

    echo hello > -
    

    Nasıl yapabilirim - Bu örnekte STDOUT?

  2. Tersine, nasıl yapabilirim -, - gibi örneklerde:

    cat -
    
121
Tim

- Dosyasını stdin/stdout olarak bir dosya adı olarak kullanmak, birçok programın kullandığı bir kuraldır. Dosya adının özel bir özelliği değildir. Çekirdek - 'U özel olarak tanımıyor, bu nedenle -' Ye dosya adı olarak atıfta bulunulan herhangi bir sistem çağrısı dosya adı olarak - Kullanacaktır.

Bash yeniden yönlendirmesiyle - Özel bir dosya adı olarak tanınmaz, bu nedenle bash bunu gerçek dosya adı olarak kullanır.

cat, - Dizgisini bir dosya adı olarak gördüğünde, stdin ile eşanlamlı olarak kabul eder. Bu sorunu aşmak için, cat'nin gördüğü dizeyi, yine de - Adlı bir dosyaya gönderme yapacak şekilde değiştirmeniz gerekir. Bunu yapmanın genel yolu, dosya adının önüne bir önek eklemektir - ./- Veya /home/Tim/-. Bu teknik, komut satırı seçeneklerinin dosya adlarıyla çakıştığı benzer sorunları gidermek için de kullanılır, bu nedenle ./-e Olarak adlandırılan bir dosya, örneğin bir programa -e Komut satırı seçeneği olarak görünmez. .

169
camh
  1. Onun yerine echo hello > -, kullanabilirsiniz echo hello > /dev/stdout.

    '-' onu desteklemek isteyen her program tarafından uygulanması gereken bir sözleşmedir, /dev/stdin, /dev/stdout ve /dev/stderr, işletim sistemi tarafından desteklendiğinde (en azından Solaris, Linux ve BSD'ler), uygulamadan bağımsızdır ve daha sonra istediğiniz gibi çalışacaktır.

18
jlliagre

belirtildiği gibi olarak, - Sadece bazı programlar tarafından kullanılan bir adlandırma kuralıdır. Bu akışlara bir dosya tanımlayıcıyla başvurmak isterseniz, Shell /dev/stdin Veya /dev/stdout Adını kullandığınızda tanıyacaktır; jiliagre doğruyd . Bu dosya adları normal bir dosya adının çalışabileceği her yerde çalışmalıdır.

  1. Bununla birlikte, ilk örneğiniz biraz aptalca. Yönlendirme operatörü tarafından bir dosyaya yazmak için yakalanacak herhangi bir çıktı zaten AÇIK standart çıktıdadır, bu nedenle yeniden yönlendirmek ve geldiği yere geri yazmak işe yaramaz. Burada kullandığınız davranış yönlendirme değil, yöneltmedir:

    echo hello |
    
  2. İkinci örneğinizde, iç ad takma adını değil, bu adın bir litteral dosyasını istediğinizi gösteren bazı göstergeler vermeniz yeterlidir. Bunu, dosyaya şu şekilde bir yol belirterek en kolay şekilde yapabilirsiniz:

    cat ./-
    
10
Caleb

1 gelince, program desteklemelidir. Sadece keyfi olarak kullanamazsınız. 2'ye gelince, girişi (ör. cat < -).

6
bahamat

'-' yaklaşımının birçok sorunu var. Her şeyden önce '-' karakterinin yorumlanmasını gerektirir ve birçok program böyle bir yorum yapmaz. Ayrıca, bir tireyi komut satırı seçeneklerinin sonunu işaretleyen bir sınırlayıcı olarak yorumlayan bazı programlar vardır. Programlar dosya adı argümanlarıyla çalışmak için yazılmıştır, '-' yaklaşımı bir hacktir, Güzel ama zayıftır.

En iyi yol:

$ echo hello > /dev/fd/1

/dev/stdout, /dev/fd/1

1
b3h3m0th

Özel karakterlerin çoğunlukla iki anlamı vardır:

ASCII sayısal grafiği.

Komut dosyası veya sembolik.

Tek bir karakterin bir dizeyi temsil etmesi veya dize gibi davranması mümkündür. benim anlayışım olarak.

c dilinde fopen() işlevi ilk olarak dosya akışı ve dosyanın açılacağı ikinci modda iki bağımsız değişken alır. mod bir dizedir. tek bir karakter olsa bile.

cat> "-" çalışır.

0
Owais Qureshi