溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Shell腳本中/dev/null 的用途是什么

發(fā)布時(shí)間:2022-01-21 11:57:17 來(lái)源:億速云 閱讀:157 作者:柒染 欄目:開(kāi)發(fā)技術(shù)

今天給大家介紹一下Shell腳本中/dev/null 的用途是什么。文章的內(nèi)容小編覺(jué)得不錯(cuò),現(xiàn)在給大家分享一下,覺(jué)得有需要的朋友可以了解一下,希望對(duì)大家有所幫助,下面跟著小編的思路一起來(lái)閱讀吧。


/dev/null 是一個(gè)特殊的設(shè)備文件,它丟棄一切寫(xiě)入其中的數(shù)據(jù) 可以將它 視為一個(gè)黑洞, 它等效于只寫(xiě)文件, 寫(xiě)入其中的所有內(nèi)容都會(huì)消失, 嘗試從中讀取或輸出不會(huì)有任何結(jié)果,同樣,/dev/null 在命令行和腳本中都非常有用

用途

/dev/null 通常被用于丟棄不需要的輸出流,或作為用于輸入流的空文件,這些操作通常由重定向完成,任何你想丟棄的數(shù)據(jù)都可以寫(xiě)入其中

丟棄標(biāo)準(zhǔn)輸出

在寫(xiě)shell腳本的時(shí)候,只想通過(guò)命令的結(jié)果執(zhí)行后面的邏輯,而不想命令執(zhí)行過(guò)程中有一大堆中間結(jié)果輸出,這時(shí)候可以把命令執(zhí)行過(guò)程中的輸入全部寫(xiě)入 /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...

說(shuō)明: 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é)果和原來(lái)的結(jié)果是一樣的

丟棄標(biāo)準(zhǔn)錯(cuò)誤輸出

在shell腳本中,刪除一個(gè)文件的時(shí)候,需要先判斷文件是否存在,然后才能執(zhí)行刪除操作,否則刪除的時(shí)候會(huì)輸出錯(cuò)誤, 一般的刪除文件腳本內(nèi)容如下:

#!/bin/bash 
    
   if [ -f $1 ]; then 
      rm $1 
   fi

可以通過(guò)把刪除命令的輸出重定向到 /dev/null 來(lái)避免輸出錯(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: 無(wú)法訪問(wèn)t*.txt: 沒(méi)有那個(gè)文件或目錄

ls: 無(wú)法訪問(wèn)t*.txt: 沒(méi)有那個(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è)試通過(guò)之后,這些調(diào)試日志可能就刪除或者注釋掉了

這里提供一個(gè)小技巧,既不用刪除也不用注釋掉日志,同時(shí)執(zhí)行腳本的時(shí)候還不會(huì)輸出這些調(diào)試日志

比如: 當(dāng)前目錄有一個(gè)日志文件 log.txt,腳本的調(diào)試日志會(huì)以 echo " this is debug log" >> log.txt 的形式寫(xiě)入這個(gè)文件中

現(xiàn)在腳本功能測(cè)試通過(guò)了,調(diào)試日志不需要寫(xiě)入log.txt了

可以這么做:原來(lái)的腳本原樣不動(dòng),本地先刪除 log.txt,然后執(zhí)行 ln -s /dev/null ./log.txt 命令,該命令建立了一個(gè) log.txt 到 /dev/nulll的軟連接,以后都有寫(xiě)入 log.txt 的內(nèi)容實(shí)際都會(huì)寫(xiě)入 /dev/null ,而寫(xiě)入 /dev/null 的所有內(nèi)容都會(huì)被丟棄掉

以上就是Shell腳本中/dev/null 的用途是什么的全部?jī)?nèi)容了,更多與Shell腳本中/dev/null 的用途是什么相關(guān)的內(nèi)容可以搜索億速云之前的文章或者瀏覽下面的文章進(jìn)行學(xué)習(xí)哈!相信小編會(huì)給大家增添更多知識(shí),希望大家能夠支持一下億速云!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI