shell常用重定向?qū)嵗v解
每個(gè)打開的文件都會(huì)被分配一個(gè)文件描述符.stdin (鍵盤), stdout (屏幕), 和 stderr (錯(cuò)誤消息輸出到屏幕上)的文件描述符分別是0, 1, 和 2. 對(duì)于正在打開的額外文件, 保留了描述符3到9.
文件描述符是文件系統(tǒng)為了跟蹤這個(gè)打開的文件而分配給它的一個(gè)數(shù)字。
下面以實(shí)例說明
1,>的用法
[zhangy@localhost ~]$ echo "11111" > 1.txt
[zhangy@localhost ~]$ cat 1.txt
11111
[zhangy@localhost ~]$ echo "11111" 1> 1.txt //這個(gè)用法和上面的用法是一樣
[zhangy@localhost ~]$ cat 1.txt
11111
[zhangy@localhost ~]$ echo "22222" >1.txt
[zhangy@localhost ~]$ cat 1.txt
22222
這種用法我想大家都非常的熟悉,因?yàn)檫@是我經(jīng)常會(huì)用到的。echo "11111" > 1.txt 時(shí),>前面是有一個(gè)1的,是默認(rèn)的。>重定向到文件時(shí),會(huì)將文件清空,在寫入。
[zhangy@localhost ~]$ > 1.txt
[zhangy@localhost ~]$ :> 1.txt
上面的這個(gè)例子,可以把1.txt文件中的內(nèi)容清空,其實(shí)也很好理解,清空后,不輸入內(nèi)容當(dāng)然為空了。
2,>>的用法
[zhangy@localhost ~]$ echo "2222" >> 2.txt
[zhangy@localhost ~]$ cat 2.txt
2222
[zhangy@localhost ~]$ echo "2222" >> 2.txt
[zhangy@localhost ~]$ cat 2.txt
2222
2222
從上面的這個(gè)例子我們可以看出,>>重定向到文件時(shí),會(huì)將輸出寫到文件的結(jié)尾。這一點(diǎn)和>完全不同的。
3,0,1,2 到9,以及&
[zhangy@localhost ~]$ cat 1.txt
333
111
222
444
[zhangy@localhost ~]$ grep "22" 0< 1.txt //把1.txt中的內(nèi)容讀取出來
222
[zhangy@localhost ~]$ ls tank 2>> 1.txt //將錯(cuò)誤信息放到文件的結(jié)尾
[zhangy@localhost ~]$ cat 1.txt
333
111
222
444
ls: tank: 沒有那個(gè)文件或目錄 //這個(gè)就是 2>> 1.txt產(chǎn)生的內(nèi)容
[zhangy@localhost ~]$ (ls tank ;pwd) &>1.txt //將錯(cuò)誤信息,以及輸出內(nèi)容放到1.txt文件中,&(stderr,stdout)
[zhangy@localhost ~]$ cat 1.txt
ls: tank: 沒有那個(gè)文件或目錄
/home/zhangy
i>&j重定向文件描述符i 到 j.指向i文件的所有輸出都發(fā)送到j(luò)中去. i和j呢是0-9這間的數(shù)字
[zhangy@localhost ~]$ ls tank 2>&1|egrep \* 1> 2.txt //在這里我把錯(cuò)誤信息重定向到了1,在這里1就會(huì)輸出錯(cuò)誤,根賦值差不多
[zhangy@localhost ~]$ cat 2.txt
ls: tank: 沒有那個(gè)文件或目錄
4,<>的用法
<這個(gè)符號(hào)是讀取,>這個(gè)符號(hào)是輸出,放在一起就打開并且讀取,
[zhangy@localhost ~]$ echo 123546 > 2.txt
[zhangy@localhost ~]$ exec 4<> 2.txt //打開2.txt并將內(nèi)容讀取到&4中
[zhangy@localhost ~]$ read -n 4 <&4 //從&4中讀取4個(gè)字符
[zhangy@localhost ~]$ echo -n . >&4 //在向&4寫入一個(gè)點(diǎn)
[zhangy@localhost ~]$ exec 4>&- //關(guān)閉輸出文件描述符4
[zhangy@localhost ~]$ cat 2.txt
1235.6
能過上面的這個(gè)例子,就可以很清楚了解<>他的作用
5,n<&-關(guān)閉輸入文件描述符n n>&關(guān)閉輸出文件描述符n
[zhangy@localhost ~]$ ls tank //會(huì)提示錯(cuò)誤
ls: tank: 沒有那個(gè)文件或目錄
[zhangy@localhost ~]$ ls tank 2>&- //我把錯(cuò)誤關(guān)閉后,什么也不輸出了
6,|管理命令
這個(gè)命令也是我們常用的,是典型的,把一個(gè)命令的輸出,當(dāng)作另一個(gè)命令的輸入
[zhangy@localhost ~]$ echo tank | wc -w
1
表示tank是一個(gè)輸出,但它又是wc的輸入,不然就不會(huì)有統(tǒng)計(jì)出現(xiàn)了。
相關(guān)文章
檢查linux網(wǎng)絡(luò)狀態(tài)的兩個(gè)腳本
檢查linux網(wǎng)絡(luò)狀態(tài)的兩個(gè)腳本,包括通過定時(shí)收發(fā)email檢測(cè)網(wǎng)絡(luò)連通性、定時(shí)檢測(cè)網(wǎng)絡(luò)狀態(tài)通過email發(fā)送,有需要的朋友可以參考下2013-02-02Shell腳本自動(dòng)部署項(xiàng)目的方法步驟
本文主要介紹了Shell腳本自動(dòng)部署項(xiàng)目的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03linux腳本實(shí)現(xiàn)自動(dòng)發(fā)送和收取郵件的設(shè)置方法
這篇文章主要是介紹linux下通過腳本自動(dòng)發(fā)送和收取郵件的設(shè)置方法,有需要的朋友可以參考下2013-05-05jenkins 實(shí)現(xiàn)shell腳本化定時(shí)執(zhí)行任務(wù)的方法
這篇文章主要介紹了jenkins 實(shí)現(xiàn)shell腳本化定時(shí)執(zhí)行任務(wù),解決訪問是jenkins構(gòu)建好之后將jar遠(yuǎn)程推送到生產(chǎn)服務(wù)器,提前退出后臺(tái)執(zhí)行服務(wù)器遠(yuǎn)程腳本,腳本通過ngnx提前切走nginx代理auction sleep 1800s,半小時(shí)后執(zhí)行更新重啟,具體操作過程跟隨小編一起看看吧2022-01-01