tee用于把命令結(jié)果打印在屏幕上并同時(shí)保存到文件。
鼓樓網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)公司從2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
tee用法
描述:從標(biāo)準(zhǔn)輸入中讀取并同時(shí)寫入到標(biāo)準(zhǔn)輸出和指定的文件上
選項(xiàng):
-a,--append:不覆蓋,而是追加輸出到指定的文件中
-i,--ignore-interrupts:忽略中斷信息
若指定的輸出文件為'-',則再次輸出到標(biāo)準(zhǔn)輸出上
實(shí)例:
tee Example.txt #將標(biāo)準(zhǔn)輸入中輸入的內(nèi)容同時(shí)輸出到Example.txt和標(biāo)準(zhǔn)輸出上
實(shí)踐:
例如 ifconfig | tee ifconfig.log
查看iconfig.log
注:
標(biāo)準(zhǔn)輸入一般有鍵盤和其它文件,標(biāo)準(zhǔn)輸出有屏幕等。tee只能進(jìn)行標(biāo)準(zhǔn)輸入的輸出,對(duì)于錯(cuò)誤輸入是不能輸出的。
在調(diào)試腳本時(shí),想要每個(gè)命令的執(zhí)行過(guò)程都輸出到屏幕或者文件中,以便后續(xù)查看,如何操作呢?首先腳本第一行要寫為“#!/bin/bash -x”,這樣會(huì)把每個(gè)命令的執(zhí)行記錄都輸出到屏幕,若還要輸出到指定文件,要用到tee,但tee只能進(jìn)行標(biāo)準(zhǔn)輸入,對(duì)于標(biāo)準(zhǔn)輸入和錯(cuò)誤輸入要用到下式:
./filename.sh 21 | tee output.log? ?或者直接 bash -x ./filename.sh?21 | tee output.log
今天調(diào)試一個(gè)bash,要把屏幕的輸出結(jié)果存到log文件中,開(kāi)始輸入$bash -x ./test.sh log 結(jié)果發(fā)現(xiàn)log里只存放了程序的執(zhí)行結(jié)果,后來(lái)在cu的一篇帖子里?tid=264380highlight=bash得到了啟發(fā),bash -x的調(diào)試信息是輸出到2號(hào)流中的,所以解決方案為bash -x ./test.sh 21 | tee log 想起以前要存放執(zhí)行make的結(jié)果時(shí)也遇到類似問(wèn)題,總結(jié)如下:
1、管道符的“I”的作用只是把前一個(gè)程序的標(biāo)準(zhǔn)輸出流(stdout)的數(shù)據(jù)作為后一個(gè)程序的標(biāo)準(zhǔn)輸入流stdin的數(shù)據(jù),如不進(jìn)行重定向,則其他輸出流的信息是無(wú)法傳給后面的程序的
2、屏幕得到的信息不一定是從程序的標(biāo)準(zhǔn)輸出來(lái)的,也包括標(biāo)準(zhǔn)錯(cuò)誤輸出流stderr中的信息
3、有些程序(特別是象bash、make這樣執(zhí)行了其他程序的程序)的設(shè)計(jì)者為了省事,把一些正常情況的信息也放在stderr中輸出(即使程序本身并無(wú)錯(cuò)誤),而stdout用來(lái)輸出被調(diào)用程序的執(zhí)行時(shí)信息,造成了用戶的誤解簡(jiǎn)單編寫了一下腳本,通過(guò)ssh登陸在命令行下運(yùn)行正常,可是將腳本添加到crontab中就不正常。想記錄一下輸出信息,分析一下錯(cuò)誤原因。將腳本通過(guò)使用info.log 重定向輸出,結(jié)果發(fā)現(xiàn)一些在命令行下可以看到的文本信息沒(méi)有記錄到info.log文件中,研究了一下,那些輸出估計(jì)是輸出到了標(biāo)準(zhǔn)錯(cuò)誤上。
研究了一下通常添加命令后面幾個(gè)輸出含義
■ /dev/null 輸出到空設(shè)備,表示丟掉輸出信息。
■ 21將輸出到標(biāo)準(zhǔn)錯(cuò)誤的信息輸出到標(biāo)準(zhǔn)輸出設(shè)備(通常是屏幕)有3個(gè)默認(rèn)的i/o,
■ 0是標(biāo)準(zhǔn)輸入,一般是鍵盤
■ 1是標(biāo)準(zhǔn)輸出,一般是屏幕
■ 2是標(biāo)準(zhǔn)錯(cuò)誤,有時(shí)候屏幕上可以看到,但是重定向的文件中看不到的就是它了
在linux命令行里輸出帶顏色的字符,需要使用ascii碼里的字符屬性設(shè)置描述符。
\033[0m 關(guān)閉所有屬性
\033[1m 設(shè)置高亮度
\033[30m 至 \33[37m 設(shè)置前景色
\033[40m 至 \33[47m 設(shè)置背景色
其中顏色代碼是:
背景顏色范圍:40----49
40:黑
41:深紅
42:綠
43:黃色
44:藍(lán)色
45:紫色
46:深綠
47:白色
字(前景)顏色:30-----------39
30:黑
31:紅
32:綠
33:黃
34:藍(lán)色
35:紫色
36:深綠
37:白色
例如你要輸出紅色的“hello world”:
\033[31mheool world \033[0m
printf 是linux 下的格式化輸出命令。
有點(diǎn)兒類似于python 和c 語(yǔ)言的printf 命令,但是應(yīng)該沒(méi)有c語(yǔ)言的那么強(qiáng)大.。printf 命令常用于linux 下的awk 編程, 平時(shí)使用輸出時(shí)用 echo 即可。pintf 命令不能接受管道符參數(shù),也不能之直接跟文件名, 但是可以跟系統(tǒng)命令執(zhí)行的結(jié)果,如`df` 或者 $(cat /etc/passwd)。
一、命令格式: printf ?'輸出類型轉(zhuǎn)義符' 輸出內(nèi)容。
二、常用輸出格式:
1、%ns : ?輸出字符串; 輸出n位的字符串;
2、 %ni: ????輸出整數(shù): 輸出n位的整數(shù);
3、%m.nf: ?輸出浮點(diǎn)數(shù): m位整數(shù) 和 n位小數(shù);
三、常用轉(zhuǎn)義符:
1、\t ?水平tab 鍵;
2、\v ?垂直tab 鍵;
3、\n ?換行;
4、\r ??回車, Enter鍵;
5、\f ??清除屏幕;
6、\b ?輸出退格鍵;
7、\a ?輸出警告聲音。
注意:
1. printf 命令默認(rèn)輸出結(jié)果沒(méi)有換行符,需要手工添加\n。
2. printf 命令后面不能接受管道符參數(shù), 如: ?df ?| print ?'%s' 是錯(cuò)誤的。
3. print ?命令后面也不能直接跟文件名, 如: print '%5s' ?/etc/passwd ?是錯(cuò)誤的。
4. print ?命令后可以跟系統(tǒng)命令執(zhí)行的結(jié)果, 如: print '%s' ?$(cat /etc/password)'。