>&0
, >&0
'un dosya tanımlayıcısı 0 olarak yinelenen dosya tanımlayıcısı 1 olmasını sağlar. Eğer programın stdin'i yalnızca okuma için açıksa, programınız stdout'a (dosya tanıtıcısı 1) yazmaya çalıştığında Bir hata çünkü dosya tanıtıcı 1 sadece okumak için açıktır.
10156115.sh:
#!/bin/bash
bash -c 'ls -l /proc/$$/fd' >&0
Sonra tanımlanabilir Stdin, stdout ve stderr ile çağırmak:
Bunu kendi dosya tanımlayıcıları inceler küçük kabuk programlar yazarak bunu gösterebilir
$ touch stdin
$ ./10156115.sh <stdin> stdout 2> stderr
sonuç almak olduğunu stderr
aşağıdaki:
ls: write error: Bad file descriptor
Ancak varsayılan olarak, her üç bir terminal gibidir: (çıkış basitleştirilmiş)
$ ls -l /proc/$$/fd
lrwx------ 0 -> /dev/pts/14
lrwx------ 1 -> /dev/pts/14
lrwx------ 2 -> /dev/pts/14
lrwx------ 255 -> /dev/pts/14
Tipik olarak, her üç aslında açık okuma + yazma, bu nedenle tek başına kullanıldığında >&0
yönlendirme hiç bir etkisi yoktur normal bir kabuktan.
Bunun için herhangi bir kullanım var mı?
bunların hiçbirini yaygın kullanımları yoktur, ama herkese senaryonuz stdout
ve stderr
yönlendirmeleri çağırır ve sebebi ne olursa olsun sen değilsin için eğer terminale yazdırmak için bir yol almak için bir kirli hack olarak kullanabilir Bunu değiştirebiliriz:
Bunu yapmayı kesinlikle tavsiye etmem.