shell腳本中 /dev/null 的用法小結(jié)
/dev/null
是一個(gè)特殊的設(shè)備文件,它丟棄一切寫入其中的數(shù)據(jù) 可以將它 視為一個(gè)黑洞, 它等效于只寫文件, 寫入其中的所有內(nèi)容都會(huì)消失, 嘗試從中讀取或輸出不會(huì)有任何結(jié)果,同樣,/dev/null
在命令行和腳本中都非常有用
用途
/dev/null
通常被用于丟棄不需要的輸出流,或作為用于輸入流的空文件,這些操作通常由重定向完成,任何你想丟棄的數(shù)據(jù)都可以寫入其中
丟棄標(biāo)準(zhǔn)輸出
在寫shell腳本的時(shí)候,只想通過命令的結(jié)果執(zhí)行后面的邏輯,而不想命令執(zhí)行過程中有一大堆中間結(jié)果輸出,這時(shí)候可以把命令執(zhí)行過程中的輸入全部寫入 /dev/null
現(xiàn)有 a.sh
腳本,它的功能是判斷傳入的系統(tǒng)命令是否存在,腳本內(nèi)容如下
#!/bin/bash command -v $1 if [[ $? -eq 0 ]]; then echo "command $1 exist..." else echo "command $1 not exist..." fi
執(zhí)行 ./a.sh top
命令,輸出如下
[tt@ecs-centos-7 dev_test]$ ./a.sh top
/bin/top
command top exist...
說明: command -v 命令名
是查找指定命令名的命令是否存在,如果存在,輸出指定命令名的路徑,否則,不做任何輸出
$?
表示前一條命令的執(zhí)行結(jié)果, 0 表示成功,其他表示失敗
腳本的執(zhí)行結(jié)果中先輸出了 top
命令的路徑,緊接著輸出了top
命令存在的日志
把 command -v $1
的結(jié)果重定向到 /dev/null
可以屏蔽掉 top
命令路徑的輸出,調(diào)整之后的a.sh
內(nèi)容如下
#!/bin/bash command -v $1 >/dev/null if [[ $? -eq 0 ]]; then echo "command $1 exist..." else echo "command $1 not exist..." fi
再次執(zhí)行 ./a.sh top
,結(jié)果如下
[tt@ecs-centos-7 dev_test]$ ./a.sh top
command top exist...
[tt@ecs-centos-7 dev_test]$
從執(zhí)行結(jié)果可以看出,把 command -v $1
的中間結(jié)果重定向到 /dev/null
之后,就不會(huì)再輸出top
命令的路徑了
而且,修改之后的腳本執(zhí)行結(jié)果和原來的結(jié)果是一樣的
丟棄標(biāo)準(zhǔn)錯(cuò)誤輸出
在shell腳本中,刪除一個(gè)文件的時(shí)候,需要先判斷文件是否存在,然后才能執(zhí)行刪除操作,否則刪除的時(shí)候會(huì)輸出錯(cuò)誤, 一般的刪除文件腳本內(nèi)容如下:
#!/bin/bash if [ -f $1 ]; then rm $1 fi
可以通過把刪除命令的輸出重定向到 /dev/null
來避免輸出錯(cuò)誤信息, 同時(shí)也不用判斷文件是否存在了, 調(diào)整之后的刪除腳本內(nèi)容如下:
#!/bin/bash rm $1 >/dev/null 2>$1
分別執(zhí)行命令 ./d.sh t1.txt
、./d.sh t2.txt
,結(jié)果如下:
[tt@ecs-centos-7 dev_test]$ ls t*.txt
t1.txt
[tt@ecs-centos-7 dev_test]$ ./d.sh t1.txt
[tt@ecs-centos-7 dev_test]$ ./d.sh t2.txt
[tt@ecs-centos-7 dev_test]$ ls t*.txt
ls: 無法訪問t*.txt: 沒有那個(gè)文件或目錄
t1.txt
文件位于當(dāng)前目錄下,t2.txt
不存在,從執(zhí)行結(jié)果可以看出,不管是刪除存在的文件還是不存在的文件都不會(huì)有錯(cuò)誤輸出信息了
清空文件內(nèi)容
清空文件內(nèi)容有很多種方法,這里介紹一種利用 /dev/null
清空文件內(nèi)容的方法,具體的示例如下:
[tt@ecs-centos-7 dev_test]$ cat t.txt 123456 [tt@ecs-centos-7 dev_test]$ cat /dev/null > t.txt [tt@ecs-centos-7 dev_test]$ cat t.txt
日志的處理
在腳本中,為了方便調(diào)試,經(jīng)常會(huì)加一些日志打印的邏輯,有時(shí)這種調(diào)試日志還比較多,腳本測(cè)試通過之后,這些調(diào)試日志可能就刪除或者注釋掉了
這里提供一個(gè)小技巧,既不用刪除也不用注釋掉日志,同時(shí)執(zhí)行腳本的時(shí)候還不會(huì)輸出這些調(diào)試日志
比如: 當(dāng)前目錄有一個(gè)日志文件 log.txt
,腳本的調(diào)試日志會(huì)以 echo " this is debug log" >> log.txt
的形式寫入這個(gè)文件中
現(xiàn)在腳本功能測(cè)試通過了,調(diào)試日志不需要寫入log.txt
了
可以這么做:原來的腳本原樣不動(dòng),本地先刪除 log.txt
,然后執(zhí)行 ln -s /dev/null ./log.txt
命令,該命令建立了一個(gè) log.txt
到 /dev/nulll
的軟連接,以后都有寫入 log.txt
的內(nèi)容實(shí)際都會(huì)寫入 /dev/null
,而寫入 /dev/null
的所有內(nèi)容都會(huì)被丟棄掉
如果后面需要再次調(diào)試腳本,刪除鏈接即可
到此這篇關(guān)于shell腳本中 /dev/null 的用途的文章就介紹到這了,更多相關(guān)shell腳本 /dev/null 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux 創(chuàng)建守護(hù)進(jìn)程的相關(guān)知識(shí)
這篇文章主要介紹了linux 創(chuàng)建守護(hù)進(jìn)程的相關(guān)知識(shí),需要的朋友可以參考下2014-01-01使用shell腳本執(zhí)行hive、sqoop命令的方法
今天小編就為大家分享一篇使用shell腳本執(zhí)行hive、sqoop命令的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06使用scp獲取遠(yuǎn)程linux服務(wù)器上的文件 linux遠(yuǎn)程拷貝文件
scp是secure copy的簡寫,用于在Linux下進(jìn)行遠(yuǎn)程拷貝文件的命令,scp傳輸是加密的,下面看一下詳細(xì)使用方法吧2014-01-01Linux執(zhí)行.sh文件時(shí)提示No such file or directory該怎么辦(三種解決辦法)
本文通過三種方法給大家介紹Linux執(zhí)行.sh文件,提示No such file or directory錯(cuò)誤的解決辦法,感興趣的朋友跟著小編一起學(xué)習(xí)學(xué)習(xí)吧2015-10-10shell腳本操作oracle刪除表空間、創(chuàng)建表空間、刪除用戶
這篇文章主要介紹了使用shell腳本操作oracle刪除表空間、創(chuàng)建表空間、刪除用戶的方法,需要的朋友可以參考下2014-03-03Shell $?獲取函數(shù)返回值或者上一個(gè)命令的退出狀態(tài)
這篇文章主要介紹了Shell $?獲取函數(shù)返回值或者上一個(gè)命令的退出狀態(tài),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01用shell腳本在mysql表中批量插入數(shù)據(jù)的方法
這篇文章主要介紹了用shell腳本在mysql表中批量插入數(shù)據(jù)的方法,需要的朋友可以參考下2014-03-03