重定向符
一、輸出重定向
標準輸出的目標位置通常指向的是終端屏幕。可以使用>符號修改標準輸出的目標位置。比如下面的示例就會將ps命令的輸出重定向到result.txt文件。描述符和>之間不能有空格
$ ps > result.txt ←----- 由于已經重定向到 result.txt 文件,所以屏幕上不會輸出任何內容 $ cat result.txt PID TTY TIME CMD 10745 pts/0 0000 bash 10873 pts/0 0000 ps
如果文件已經存在,則該文件會被覆蓋,文件內容將丟失
如果不想使用>覆蓋原文件,而想向原文件追加寫入,可以使用>>重定向
$ echo line1 >> echo.txt $ echo line2 >> echo.txt $ echo line3 >> echo.txt $ cat echo.txt line1 line2 line3
重定向并不是命令的功能,而是shell的功能,只要命令能將執行結果輸出到標準輸出,就可以實現重定向。但是只有標準輸出會被重定向,標準錯誤輸出還是會直接顯示到屏幕上,那么如何將錯誤輸出重定向?
可以使用2>符號,數字2是稱為文件描述符的編號
$ ls /xxx 2> error.txt $ cat error.txt ls: 無法訪問'/xxx': 沒有那個文件或目錄
也就是說例子1中相當于是1>
或者2>>指令對錯誤進行重定向
$ ls /xxx 2>> error.txt $ cd /xxx 2>> error.txt $ cat error.txt ls: 無法訪問 '/xxx': 沒有那個文件或目錄 -bash:cd:/xxx:沒有那個文件或目錄
將標準輸出和標準錯誤輸出重定向到同一個文件(n>&m的含義是將文件描述符n設置為文件描述符m的副本)
$ ls /usr /xxx > ls_result.txt 2>&1
輸出到不同文件(將ls命令的標準輸出重定向到result.txt文件,并將標準錯誤輸出重定向到error.txt文件)
$ ls /usr /xxx > result.txt 2> error.txt
使用分組命令重定向(如果想在使用{ }時將多條命令寫到一行,需要在每條命令后面加上;)
#!/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命令對鍵盤輸入的東西進行替換吧
$ cat word.txt abcd ←----- word.txt 文件的內容 my book $trbB
管道
命令的輸出內容除了可以重定向輸出到文件,還可以作為其他命令的輸入使用。
使用less命令顯示ls命令的標準輸出內容
$ ls | less ... <-----(本行及以下5行)less 命令輸出示例 Documents Movies Music Public (END)
等效于
$ ls > result.txt $ less < result.txt
注意:管道只會將前一條命令的標準輸出傳遞給之后的命令,而第1條命令的標準錯誤輸出則不會傳遞給后面的命令。
$ ls /usr/bin | grep 'py' | wc -l 6
如果使用管道來連接一個同時顯示標準輸出和標準錯誤輸出的命令,那么屏幕上將只顯示標準錯誤輸出的內容。如果想將標準錯誤輸出和標準輸出一起傳遞給后面的命令,那么使用前面介紹的2>&1這種重定向方式即可
$ ls /usr /xxx 2>&1 | less ls: 無法訪問'/xxx': 沒有那個文件或目錄
審核編輯:湯梓紅
-
文件
+關注
關注
1文章
570瀏覽量
24822 -
命令
+關注
關注
5文章
696瀏覽量
22112 -
Shell
+關注
關注
1文章
366瀏覽量
23448 -
腳本
+關注
關注
1文章
392瀏覽量
14938 -
Shell腳本
+關注
關注
0文章
36瀏覽量
8023
原文標題:shell腳本基礎(四)重定向和管道符
文章出處:【微信號:FPGA學姐,微信公眾號:FPGA學姐】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論