成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Shell腳本中 /Dev/Null 的用途

系統 Linux
/dev/null 是一個特殊的設備文件,它丟棄一切寫入其中的數據 可以將它 視為一個黑洞, 它等效于只寫文件, 寫入其中的所有內容都會消失, 嘗試從中讀取或輸出不會有任何結果,同樣,/dev/null 在命令行和腳本中都非常有用。

[[357984]]

本文轉載自微信公眾號「Linux開發那些事兒」,作者LinuxThings。轉載本文請聯系Linux開發那些事兒公眾號。  

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

用途

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

丟棄標準輸出

在寫shell腳本的時候,只想通過命令的結果執行后面的邏輯,而不想命令執行過程中有一大堆中間結果輸出,這時候可以把命令執行過程中的輸入全部寫入 /dev/null

現有 a.sh 腳本,它的功能是判斷傳入的系統命令是否存在,腳本內容如下

  1. #!/bin/bash 
  2.     
  3.    command -v $1 
  4.     
  5.    if [[ $? -eq 0 ]]; then 
  6.       echo "command $1 exist..." 
  7.    else 
  8.       echo "command $1 not exist..." 
  9.    fi 

執行 ./a.sh top 命令,輸出如下

  1. [tt@ecs-centos-7 dev_test]$ ./a.sh top 
  2. /bin/top 
  3. command top exist... 

說明: command -v 命令名 是查找指定命令名的命令是否存在,如果存在,輸出指定命令名的路徑,否則,不做任何輸出

$? 表示前一條命令的執行結果, 0 表示成功,其他表示失敗

腳本的執行結果中先輸出了 top 命令的路徑,緊接著輸出了top命令存在的日志

把 command -v $1的結果重定向到 /dev/null 可以屏蔽掉 top命令路徑的輸出,調整之后的a.sh 內容如下

  1. #!/bin/bash 
  2.   
  3.  command -v $1 >/dev/null 
  4.   
  5.  if [[ $? -eq 0 ]]; then 
  6.     echo "command $1 exist..." 
  7.  else 
  8.     echo "command $1 not exist..." 
  9.  fi 

再次執行 ./a.sh top,結果如下

  1. [tt@ecs-centos-7 dev_test]$ ./a.sh top 
  2. command top exist... 
  3. [tt@ecs-centos-7 dev_test]$ 

從執行結果可以看出,把 command -v $1 的中間結果重定向到 /dev/null 之后,就不會再輸出top命令的路徑了

而且,修改之后的腳本執行結果和原來的結果是一樣的

丟棄標準錯誤輸出

在shell腳本中,刪除一個文件的時候,需要先判斷文件是否存在,然后才能執行刪除操作,否則刪除的時候會輸出錯誤, 一般的刪除文件腳本內容如下:

  1. #!/bin/bash 
  2.     
  3.    if [ -f $1 ]; then 
  4.       rm $1 
  5.    fi 

可以通過把刪除命令的輸出重定向到 /dev/null 來避免輸出錯誤信息, 同時也不用判斷文件是否存在了, 調整之后的刪除腳本內容如下:

  1. #!/bin/bash 
  2.  
  3. rm $1 >/dev/null 2>$1 

分別執行命令 ./d.sh t1.txt、./d.sh t2.txt ,結果如下:

  1. [tt@ecs-centos-7 dev_test]$ ls t*.txt 
  2. t1.txt 
  3. [tt@ecs-centos-7 dev_test]$ ./d.sh t1.txt 
  4. [tt@ecs-centos-7 dev_test]$ ./d.sh t2.txt 
  5. [tt@ecs-centos-7 dev_test]$ ls t*.txt 
  6. ls: 無法訪問t*.txt: 沒有那個文件或目錄 

ls: 無法訪問t*.txt: 沒有那個文件或目錄

t1.txt 文件位于當前目錄下,t2.txt 不存在,從執行結果可以看出,不管是刪除存在的文件還是不存在的文件都不會有錯誤輸出信息了

清空文件內容

清空文件內容有很多種方法,這里介紹一種利用 /dev/null 清空文件內容的方法,具體的示例如下:

  1. [tt@ecs-centos-7 dev_test]$ cat t.txt  
  2. 123456 
  3. [tt@ecs-centos-7 dev_test]$ cat /dev/null > t.txt  
  4. [tt@ecs-centos-7 dev_test]$ cat t.txt 

日志的處理

在腳本中,為了方便調試,經常會加一些日志打印的邏輯,有時這種調試日志還比較多,腳本測試通過之后,這些調試日志可能就刪除或者注釋掉了

這里提供一個小技巧,既不用刪除也不用注釋掉日志,同時執行腳本的時候還不會輸出這些調試日志

比如: 當前目錄有一個日志文件 log.txt,腳本的調試日志會以 echo " this is debug log" >> log.txt 的形式寫入這個文件中

現在腳本功能測試通過了,調試日志不需要寫入log.txt了

可以這么做:原來的腳本原樣不動,本地先刪除 log.txt,然后執行 ln -s /dev/null ./log.txt 命令,該命令建立了一個 log.txt 到 /dev/nulll的軟連接,以后都有寫入 log.txt 的內容實際都會寫入 /dev/null ,而寫入 /dev/null 的所有內容都會被丟棄掉

 

責任編輯:武曉燕 來源: Linux開發那些事兒
相關推薦

2020-10-27 07:51:12

Shell腳本日期

2021-05-11 07:50:31

BashShell腳本

2022-08-30 08:52:04

shell腳本Linux

2022-11-17 08:40:14

Linux輸出錯誤重定向

2023-07-31 08:45:10

Shell腳本

2019-11-07 23:48:12

shell腳本getopts

2019-08-09 13:50:08

shellLinux

2016-12-16 09:23:29

LinuxShell腳本

2024-11-27 09:19:25

2021-05-12 10:17:15

Shell工具Linux

2021-08-20 10:46:25

Shell腳本文件Linux

2021-04-21 08:03:34

腳本Shell讀取

2013-09-04 09:59:49

監控 Shell 腳本

2025-02-13 09:26:43

Python元組集合

2011-07-12 17:11:13

PHPSHELL

2010-09-17 10:24:47

SQL中IS NULL

2013-08-19 12:46:27

2013-08-30 10:25:22

Shell主機監控

2018-08-28 16:02:59

LinuxShellBash

2021-04-25 11:41:58

Linux運維Linux系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久av| 亚洲精品视频一区 | 中文字幕一区二区三区精彩视频 | 国产91在线播放 | 久久久久国产精品 | 日本高清视频网站 | 国产欧美一区二区三区日本久久久 | 久久久久国产一区二区三区不卡 | 在线成人av| 中文字幕精品一区二区三区在线 | 成人小视频在线免费观看 | 成人精品福利 | 久久精品欧美一区二区三区不卡 | 国产精品久久久久久久久图文区 | 久久久毛片 | 精品毛片 | 国产中文 | 91在线视频播放 | 精品1区 | 欧美片网站免费 | 中文字幕免费在线观看 | 国产91久久久久蜜臀青青天草二 | 国产欧美综合在线 | 在线观看av不卡 | 精品久久久久久 | 亚洲乱码一区二区 | 波多野结衣精品 | 中文字幕一区二区三区精彩视频 | 久久一区二区视频 | 日韩av在线不卡 | 午夜影院在线观看版 | 国产精品高 | 日本一区二区三区在线观看 | 国产一级一片免费播放 | 在线观看毛片网站 | 久草免费在线视频 | 久久伊人青青草 | 国产成人一区二区三区久久久 | 精品久久久久久久久久久 | 极品粉嫩国产48尤物在线播放 | 亚洲人在线观看视频 |