重定向符
一、輸出重定向
標(biāo)準(zhǔn)輸出的目標(biāo)位置通常指向的是終端屏幕??梢允褂?符號(hào)修改標(biāo)準(zhǔn)輸出的目標(biāo)位置。比如下面的示例就會(huì)將ps命令的輸出重定向到result.txt文件。描述符和>之間不能有空格
$ ps > result.txt ←----- 由于已經(jīng)重定向到 result.txt 文件,所以屏幕上不會(huì)輸出任何內(nèi)容 $ cat result.txt PID TTY TIME CMD 10745 pts/0 0000 bash 10873 pts/0 0000 ps
如果文件已經(jīng)存在,則該文件會(huì)被覆蓋,文件內(nèi)容將丟失
如果不想使用>覆蓋原文件,而想向原文件追加寫入,可以使用>>重定向
$ echo line1 >> echo.txt $ echo line2 >> echo.txt $ echo line3 >> echo.txt $ cat echo.txt line1 line2 line3
重定向并不是命令的功能,而是shell的功能,只要命令能將執(zhí)行結(jié)果輸出到標(biāo)準(zhǔn)輸出,就可以實(shí)現(xiàn)重定向。但是只有標(biāo)準(zhǔn)輸出會(huì)被重定向,標(biāo)準(zhǔn)錯(cuò)誤輸出還是會(huì)直接顯示到屏幕上,那么如何將錯(cuò)誤輸出重定向?
可以使用2>符號(hào),數(shù)字2是稱為文件描述符的編號(hào)
$ ls /xxx 2> error.txt $ cat error.txt ls: 無(wú)法訪問(wèn)'/xxx': 沒(méi)有那個(gè)文件或目錄
也就是說(shuō)例子1中相當(dāng)于是1>
或者2>>指令對(duì)錯(cuò)誤進(jìn)行重定向
$ ls /xxx 2>> error.txt $ cd /xxx 2>> error.txt $ cat error.txt ls: 無(wú)法訪問(wèn) '/xxx': 沒(méi)有那個(gè)文件或目錄 -bash:cd:/xxx:沒(méi)有那個(gè)文件或目錄
將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出重定向到同一個(gè)文件(n>&m的含義是將文件描述符n設(shè)置為文件描述符m的副本)
$ ls /usr /xxx > ls_result.txt 2>&1
輸出到不同文件(將ls命令的標(biāo)準(zhǔn)輸出重定向到result.txt文件,并將標(biāo)準(zhǔn)錯(cuò)誤輸出重定向到error.txt文件)
$ ls /usr /xxx > result.txt 2> error.txt
使用分組命令重定向(如果想在使用{ }時(shí)將多條命令寫到一行,需要在每條命令后面加上;)
#!/bin/bash { date +%Y-%m-%d echo '/usr list' ls /usr } > result.txt #------------------------------------------------------------ $ { date +%Y-%m-%d; echo '/usr list'; ls /usr; } > result.txt
分組命令的{后面要有空格,還可以使用( )代替{ }
二、輸入重定向
$ tr b B abcd←-----從鍵盤輸ru aBcd ←----- b 被替換為 B my book ←----- 從鍵盤輸入 my Book ←----- b 被替換為 B
tr命令對(duì)鍵盤輸入的東西進(jìn)行替換吧
$ cat word.txt abcd ←----- word.txt 文件的內(nèi)容 my book $trbB
管道
命令的輸出內(nèi)容除了可以重定向輸出到文件,還可以作為其他命令的輸入使用。
使用less命令顯示ls命令的標(biāo)準(zhǔn)輸出內(nèi)容
$ ls | less ... <-----(本行及以下5行)less 命令輸出示例 Documents Movies Music Public (END)
等效于
$ ls > result.txt $ less < result.txt
注意:管道只會(huì)將前一條命令的標(biāo)準(zhǔn)輸出傳遞給之后的命令,而第1條命令的標(biāo)準(zhǔn)錯(cuò)誤輸出則不會(huì)傳遞給后面的命令。
$ ls /usr/bin | grep 'py' | wc -l 6
如果使用管道來(lái)連接一個(gè)同時(shí)顯示標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出的命令,那么屏幕上將只顯示標(biāo)準(zhǔn)錯(cuò)誤輸出的內(nèi)容。如果想將標(biāo)準(zhǔn)錯(cuò)誤輸出和標(biāo)準(zhǔn)輸出一起傳遞給后面的命令,那么使用前面介紹的2>&1這種重定向方式即可
$ ls /usr /xxx 2>&1 | less ls: 無(wú)法訪問(wèn)'/xxx': 沒(méi)有那個(gè)文件或目錄
審核編輯:湯梓紅
-
文件
+關(guān)注
關(guān)注
1文章
555瀏覽量
24639 -
命令
+關(guān)注
關(guān)注
5文章
669瀏覽量
21956 -
Shell
+關(guān)注
關(guān)注
1文章
361瀏覽量
23234 -
腳本
+關(guān)注
關(guān)注
1文章
384瀏覽量
14793 -
Shell腳本
+關(guān)注
關(guān)注
0文章
36瀏覽量
7955
原文標(biāo)題:shell腳本基礎(chǔ)(四)重定向和管道符
文章出處:【微信號(hào):FPGA學(xué)姐,微信公眾號(hào):FPGA學(xué)姐】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論