shell指令碼 丟棄報錯資訊,保留正常輸出

2021-10-23 09:51:32 字數 928 閱讀 2618

我們知道,shell中通過

>/dev/null 2>&1
可以丟棄資訊,但是標準輸出和標準錯誤輸出同時被丟棄了。其含義是:將stderr重定向到stdout,然後將它們一起丟給/dev/null檔案。

怎麼做可以把錯誤輸出丟棄掉,不再輸出列印,只列印標準輸出呢?

# 丟棄標準錯誤輸出

ll anaconda-ks.cfg ***x 2>/dev/null

-rw-------. 1 root root 1707 aug 18 18:55 anaconda-ks.cfg

# 丟棄標準輸出

ll anaconda-ks.cfg ***x 1>/dev/null

ls: cannot access ***x: no such file or directory

也可以通過賦值和錯誤資訊重定向。將標準輸出和錯誤輸出都賦值給乙個變數,然後通過if語句判斷命令是否執行成功加以過濾(很早之前自己想的乙個辦法~~):

如下指令碼list ***x檔案,如果不存在肯定會報錯:ls: cannot access ***x: no such file or directory。我們不想看到這個錯,而是默默的幹點別的事情,比如:如果***x不存在就建立它。

var1=`ls ***x 2>&1`;

if [ $? -eq 0 ]; then

echo $var1

else

touch ***x

fi

上述指令碼執行效果是:***x不存在,不列印任務錯誤資訊,建立了***x;***x存在則輸出該檔名。

$ ./test1.sh 

$ ./test1.sh

***x

windows編輯shell指令碼執行報錯

windows編輯shell指令碼執行報錯 問題 2019年10月,在開發需求的時候需要在主機上編寫shell指令碼。因為自己使用的是win系統,在notepad 編寫指令碼。將指令碼上傳主機後,執行報錯 syntax error near unexpected token do 將主機上可正常執行...

shell指令碼(保留最近N天的備份)

bin bash 保留最近n天的備份 2019年6月16日11 32 59 需求 檔案備份格式為date f h m 節假日不備份 無論過幾個節假日,始終保留最新n天的備份 模擬備份 mkdir pwd test touch pwd test date d 1 day ago f h m tar.g...

shell指令碼之獲取終端資訊

如果要處理大量當前的終端的相關資訊,比如行數,列數,游標位置和遮蓋密碼欄位等,就要用到tput和stty這兩個終端處理工具了.獲取終端的行數和列數 tput cols tput lines 列印當前終端名 tput longname 將游標移到方位 100,100 處 tput cpu 100 10...