接著上節(jié)課的標(biāo)準(zhǔn)輸出講。
視頻最后我們通過(guò)重定向把標(biāo)準(zhǔn)輸出寫(xiě)到了文件中,但是錯(cuò)誤輸出還是留在了屏幕上。
root@turbo:~# ls test test.c root@turbo:~# root@turbo:~# ./test xxxxxx 錯(cuò)誤輸出 ------ 標(biāo)準(zhǔn)輸出 root@turbo:~# root@turbo:~# ./test > out.log xxxxxx 錯(cuò)誤輸出 root@turbo:~# root@turbo:~#有沒(méi)有什么方法把錯(cuò)誤輸出也寫(xiě)到文件里面?
重定向分為輸入重定向和輸出重定向,輸入重定向使用場(chǎng)景比較少,我們主要來(lái)講講輸出重定向。
先把程序修改一下,只留下標(biāo)準(zhǔn)輸出。
#include運(yùn)行程序的時(shí)候會(huì)在屏幕上打印字符串,如果希望把這些字符串收集起來(lái),運(yùn)行的時(shí)候加上輸出符號(hào)和文件名,字符串就寫(xiě)到了文件里面。int main() { //fprintf(stderr, "xxxxxx 錯(cuò)誤輸出 "); fprintf(stdout, "------ 標(biāo)準(zhǔn)輸出 "); return 0; }
root@turbo:~# gcc test.c -o test root@turbo:~# ./test > out.log root@turbo:~#一個(gè)符號(hào)表示清空文件重新寫(xiě)入,兩個(gè)符號(hào)表示往文件的后面追加。
再把程序改回來(lái),這次既有標(biāo)準(zhǔn)輸出,也有錯(cuò)誤輸出:
#include代碼的運(yùn)行現(xiàn)象是這樣的:int main() { fprintf(stderr, "xxxxxx 錯(cuò)誤輸出 "); fprintf(stdout, "------ 標(biāo)準(zhǔn)輸出 "); return 0; }
root@turbo:~# ls test test.c root@turbo:~# ./test xxxxxx 錯(cuò)誤輸出 ------ 標(biāo)準(zhǔn)輸出 root@turbo:~#如果像剛才一樣加上重定向,那只能把標(biāo)準(zhǔn)輸出寫(xiě)到文件中:
root@turbo:~# ls test test.c root@turbo:~# ./test > out.log xxxxxx 錯(cuò)誤輸出 root@turbo:~# root@turbo:~#其實(shí)這種寫(xiě)法也等價(jià)于這樣的:
root@turbo:~# ls test test.c root@turbo:~# ./test 1> out.log xxxxxx 錯(cuò)誤輸出 root@turbo:~# root@turbo:~#0 1 2在 Linux 中分別表示標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)錯(cuò)誤處理,大部分時(shí)候我們會(huì)把1省略掉。
如果想把錯(cuò)誤信息也收集到文件中,可以這樣寫(xiě):
root@turbo:~# ls out.log test test.c root@turbo:~# ./test 1> out.log 2> error.log root@turbo:~#意思也很明確,標(biāo)準(zhǔn)輸出寫(xiě)到文件out.log中,錯(cuò)誤輸出寫(xiě)到文件error.log中。
這就是上節(jié)課說(shuō)的,stdout和stderr可以把不同級(jí)別的信息分開(kāi)。
如果想把標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出寫(xiě)到同一個(gè)文件中,可以使用這條命令:
root@turbo:~# ./test > out.log 2>&1 root@turbo:~#
2>&1這個(gè)符號(hào)的意思就是把錯(cuò)誤輸出重定向到標(biāo)準(zhǔn)輸出。
需要注意的是,此處的順序不能修改,否則達(dá)不到想要的效果。
有的時(shí)候我們不想看到輸出信息,也不想保存輸出信息,可以考慮dev下的null設(shè)備文件,所有寫(xiě)進(jìn)去的數(shù)據(jù)都會(huì)被丟棄。
root@turbo:~# ./test > /dev/null 2>&1 root@turbo:~#
審核編輯:劉清
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
Linux
+關(guān)注
關(guān)注
88文章
11760瀏覽量
219021 -
字符串
+關(guān)注
關(guān)注
1文章
596瀏覽量
23165
原文標(biāo)題:2分鐘搞懂輸出重定向
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
linux shell數(shù)據(jù)重定向(輸入重定向與輸出重定向)詳細(xì)分析
>> ; /dev/stderr -> /proc/self/fd/2 2代表:/dev/stderr輸出重定向:[cpp] view plain copycommand-line1
發(fā)表于 03-02 13:59
Linux Shell系列教程之(十六) Shell輸入輸出重定向
Command > filename 2>&1把標(biāo)準(zhǔn)輸出和錯(cuò)誤一起重定向到一個(gè)文件中 Command 2 > filename把標(biāo)準(zhǔn)錯(cuò)誤重定向
發(fā)表于 09-12 15:53
五分鐘搞懂PID控制算法
【Arduino 101】五分鐘搞懂PID控制算法物料清單尺寸接線(xiàn)文章目錄物料清單尺寸接線(xiàn)物料清單Arduino Uno x 1超聲波模塊(HC-SR04)x 1舵機(jī)(Tower Pro
發(fā)表于 06-28 07:53
重定向printf輸出到串口輸出的方法
本文詳細(xì)的介紹了如何重定向printf輸出到串口輸出的多種方法,包括調(diào)用MDK微庫(kù)(MicroLib)的方法,調(diào)用標(biāo)準(zhǔn)庫(kù)的方法,以及適用于 `GNUC` 系列編譯器的方法。
發(fā)表于 02-10 07:16
DNS 重定向的缺陷
DNS 重定向的缺陷
這一種路由解決方案,由于充分利用了現(xiàn)有的網(wǎng)絡(luò)結(jié)構(gòu),結(jié)構(gòu)簡(jiǎn)單,因而被人們認(rèn)為是一種有效的技術(shù),是現(xiàn)階段CDN 應(yīng)用中主
發(fā)表于 03-25 10:25
?2501次閱讀
管道符、重定向與環(huán)境變量
1.標(biāo)準(zhǔn)輸入重定向(STDIN,文件描述符為0):默認(rèn)從鍵盤(pán)輸入,也可從其他文件或命令中輸入。 3.錯(cuò)誤輸出重定向(STDERR,文件描述符為2):默認(rèn)
發(fā)表于 04-29 08:48
?914次閱讀
Keil下使用STlink重定向printf的配置
Keil下使用STlink重定向printf的配置1. printf 重定向Keil默認(rèn)下使用Micro LIB庫(kù),該庫(kù)調(diào)用 fputs 實(shí)現(xiàn) printf,所以需要重新定義fputs函數(shù),以重定向
發(fā)表于 12-27 18:43
?18次下載
Linux I/O重定向詳解
Linux I/O重定向可以定義為,更改從命令讀取輸入到命令發(fā)送輸出的方式。你可以重定向命令的輸入和輸出。對(duì)于重定向符號(hào),可以是 或者
printf輸出重定向的方法
在 PC 上運(yùn)行 C 語(yǔ)言時(shí),prinf 輸出的內(nèi)容會(huì)打印在電腦顯示器上,這是因?yàn)?prinf 默認(rèn)的輸出設(shè)備就是顯示器。而當(dāng)我們?cè)趩纹瑱C(jī)上,需要通過(guò) printf 函數(shù)將信息打印到串口,就要對(duì) printf 函數(shù)的輸出進(jìn)行
全面掌握Linux重定向技巧:讓命令行操作效率翻倍的秘密
#1 linux輸出重定向 $ command > file 2>1 這里的 ,表示重定向的目標(biāo)不是一個(gè) 文件 ,而是一個(gè) 文件描述符 ,內(nèi)置的文件描述符如下 1 => stdout
TI Driverlib 標(biāo)準(zhǔn)輸出完整重定向的改進(jìn)方案
探索出了一種用于TI Driverlib的完整輸出重定向方案
2分鐘搞懂輸出重定向
評(píng)論