Linux Shell之八 轉向的用法

來源:互聯網
上載者:User

標籤:linux   shell.>>   &>   

一、檔案代碼

    “轉向”的意思是說:原本應由標準輸入(如鍵盤)讀取資料的,改由其它檔案讀取;原本應把結果顯示在標準輸出(如螢幕)的,改輸出到其它檔案。在這個過程中會涉及到檔案代碼(file descriptor)的概念。

    所謂檔案代碼,是指作業系統賦予已開啟檔案一個編號(由0開始),作為追蹤檔案之用,如對這個檔案進行讀取或寫入的操作,都使用檔案代碼來溝通。下邊檔案代碼數字用fd來表示。

作業系統預設3個檔案代碼:0 標準輸入、1 標準輸出、2 標準錯誤 

這3個檔案在建立Shell環境時已開啟,往後如果開啟新檔案,則分配2以上的號碼。

< 代錶轉向輸入,如果< 左邊省略檔案代碼,則預設為0,指的就是標準輸入。

> 代錶轉向輸出,如果> 左邊省略檔案代碼,則預設為1,指的就是標準輸出。

這些轉向文法大部分不能單獨使用,必須跟Bash的命令一起運用,如exec、ls、read等,是屬於指令結構的一部分

本篇中的fd、n、m代表檔案代碼

#echo ’hello,world!‘ > a.txt#exec 7<>a.txt#cat <&7hello,world!


二、操作檔案

這裡要說明的"操作檔案",是指運用轉向的概念,開啟檔案、複製檔案代碼和關閉檔案。

1、開啟檔案

文法:fd<>檔案

用途:開啟檔案,指定代碼為fd。使用這種方式開啟的檔案,可供讀寫。

用例:exec 6<>test.txt

使用exec執行轉向,開啟檔案test.txt,並指定其代碼檔案為6

2、關閉檔案

開啟檔案後,如果該檔案不再使用,最好關閉檔案,交回調用檔案代碼所佔用的系統資源。這是一個很好的習慣。

關閉轉向輸入檔案

文法:fd<&-

用例:6<&-

關閉轉向輸出檔案

文法:fd>&-

用例:exec 5>&-

3、複製檔案代碼,建立檔案連結

作業系統已開啟的檔案代碼(0、1、2),為了不影響原有檔案代碼的作用,最好先複製一份,等操作結束再還原回去,稱“複製代碼”。

兩種方式:

a、複製轉向輸入的檔案代碼m,存檔案代碼n,使n串連至m     n<&m

b、複製轉向輸出的檔案代碼m,存成檔案代碼n,使n串連至m   n>&m

用例:

exec >&6   等同於exec 1>&6,將標準輸出串連到檔案代碼6,因此,凡是出現在標準輸出的內容,會轉存至檔案代碼6

cat  <&6   等同於cat  0<&6,將檔案代碼6的內容,轉向至標準輸入,而由cat把內容顯示出來。

exec 5<&0  複製標準輸入(0),存成檔案代碼5,即建立檔案代碼0的串連,簡單說就是做標準輸入的備份。

exec 0<&5  5<&- 將儲存在檔案代碼5的標準輸入還原,並關閉檔案代碼5。


三、轉向的用法

代碼要緊鄰符號,轉向輸入輸出預設只能使用一次。

1、轉向輸入

文法:fd<檔案 

用途:使用"檔案"作為輸入,指定它的檔案代碼為fd

用例:

wc -l < /etc/passwd  #<左方省略fd,預設fd為0,指的就是標準輸入轉向:

exec 6< /etc/passwd  #<左方檔案代碼不空;

wc -l <&6            #當一次輸入斷行符號的時候,會輸出passwd行數,再按一次斷行符號則為空白             

2、轉向輸出

文法:fd>檔案

用途:使用檔案做輸出,指定檔案代碼為fd

如果檔案不存在,會建立,如果存在,會清空。可以關閉檔案預設操作set -o noclobber或set -C

用例:

>test.txt(建立空檔案)      #>左方的省略fd,fd預設為1

:>test.txt                 #效果同上

ls > dirs.txt             #儲存命令執行的輸出

exec 6> out.txt            #開啟檔案out.txt作為輸出

echo ‘hello world!‘ 1>&6   #將echo輸出的內容儲存在檔案代碼6

fd>|檔案 同fd>檔案 但fd>|不理會noclobber選項,會強制覆蓋、清空。

>|不管noclobber選項是否啟用,只要檔案存在,該內容一定會被清空。

3、轉向附加

文法:fd>>檔案    

用途:使用方法同 fd>檔案, 只是fd>>不會覆蓋、不會清空,只是追加。

4、標準錯誤伴隨標準輸出做轉向

文法:&>檔案 或 >&檔案 效果一樣。

‘>檔案 2>&1‘和 &>作用一樣。


本文出自 “Welcome To Linux World” 部落格,請務必保留此出處http://linuxnote.blog.51cto.com/9876511/1641252

Linux Shell之八 轉向的用法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.