Io-Redirection
重定向。什麼是“<>”、“<&”和“>&-”?
<>
– 幾個月前我在一個網站上看到的這個運算符,但我不記得它是什麼意思。也許我錯了,而 ksh 沒有<>
.
a<&b
– 我知道這個運算符將輸入流a
與輸出流合併b
。我對嗎?但我不知道我可以在哪裡使用它。你能給我舉個例子嗎?
>&-
——我對此一無所知。例如,是什麼2>&-
意思?
來自http://www.manpagez.com/man/1/ksh/:
<>word Open file word for reading and writing as standard out- put. <&digit The standard input is duplicated from file descriptor digit (see dup(2)). Similarly for the standard output using >&digit. <&- The standard input is closed. Similarly for the standard output using >&-.
您將通過鍵入找到所有這些詳細資訊
man ksh
。特別
2>&-
是:關閉標準錯誤流,即命令不再能夠寫入STDERR,這將打破要求它可寫的標準。要了解文件描述符的概念,*(如果在 Linux 系統上)*您可以查看
/proc/*/fd
(and/or/dev/fd/*
):$ ls -l /proc/self/fd insgesamt 0 lrwx------ 1 michas users 1 18. Jan 16:52 0 -> /dev/pts/0 lrwx------ 1 michas users 1 18. Jan 16:52 1 -> /dev/pts/0 lrwx------ 1 michas users 1 18. Jan 16:52 2 -> /dev/pts/0 lr-x------ 1 michas users 1 18. Jan 16:52 3 -> /proc/2903/fd
文件描述符 0(又名 STDIN)預設用於讀取,fd 1(又名 STDOUT)預設用於寫入,fd 2(又名 STDERR)預設用於錯誤消息。(在這種情況下,fd 3 用於
ls
實際讀取該目錄。)如果你重定向東西,它可能看起來像這樣:
$ ls -l /proc/self/fd 2>/dev/null </dev/zero 99<>/dev/random |cat insgesamt 0 lr-x------ 1 michas users 1 18. Jan 16:57 0 -> /dev/zero l-wx------ 1 michas users 1 18. Jan 16:57 1 -> pipe:[28468] l-wx------ 1 michas users 1 18. Jan 16:57 2 -> /dev/null lr-x------ 1 michas users 1 18. Jan 16:57 3 -> /proc/3000/fd lrwx------ 1 michas users 1 18. Jan 16:57 99 -> /dev/random
現在預設描述符不再指向您的終端,而是指向相應的重定向。(如您所見,您還可以創建新的 fd。)
再舉一個例子
<>
:echo -e 'line 1\nline 2\nline 3' > foo # create a new file with three lines ( # with that file redirected to fd 5 read <&5 # read the first line echo "xxxxxx">&5 # override the second line cat <&5 # output the remaining line ) 5<>foo # this is the actual redirection
你可以做這樣的事情,但你很少必須這樣做。