精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文了解標準輸入、標準輸出、標準錯誤

CHANBAEK ? 來源:myfreax ? 作者:myfreax ? 2022-12-05 16:35 ? 次閱讀

您可以通過兩種方式顯示shell腳本的輸出,在屏幕上顯示輸出或者將輸出發送到文件。

在本教程中我們說明Shell腳本中必不可少的知識,即標準輸入、標準輸出和重定向。

Linux 一切都是文件,包括輸入和輸出。每個進程都可以同時打開九個文件描述符。保留的文件描述符0、1、2提供shell進程使用。

0表示標準輸入。1表示標準輸出。2標準錯誤。您可以使用這些文件描述符來控制程序或者腳本的輸入和輸出。

您需要完全理解這三個概念,因為它是Shell腳本或者程序的支柱。因此,我們將詳細描述它們中的每一個。

標準輸入

STDIN代表標準輸入,也就是文件描述符1,默認為鍵盤。您可以使用重定向符號<將指定文件作為標準輸入。

如果你將標準輸入替換為文件,重定向符號<會將的文件數據作為標準輸入傳遞給指定的程序。

例如命令cat < archive.tar | gzip -c > archive.tar.gz使用重定向符號<archive.tar文件作為標準輸入傳遞給cat命令。

cat命令接收標準輸入后,又將archive.tar文件內容寫入標準輸出,最后通過管道傳遞給gzip命令進行壓縮。

cat < archive.tar | gzip -c > archive.tar.gz

標準輸出

STDOUT代表標準輸出,也就是文件描述符2,默認為屏幕。您可以使用重定向符號>>,>將標準輸出重定向到文件。

您可以使用重定向符號>>將數據追加到指定文件。例如命令pwd >> log會將pwd命令的標準輸出追加到文件log。

而重定向符號>則會使用標準輸出覆蓋指定文件。例如命令> filename將會清空文件filename。

pwd >> log
> filename

標準錯誤

ls file2 > file命令嘗試使用重定向>符號將標準輸出重定向到文件。如果你的計算機沒有xfile文件。

ls命令將會打印一個錯誤ls: cannot access 'file2': No such file or directory,這通常稱為標準錯誤STDERR。

默認情況下,Shell將標準錯誤發送到屏幕。如果您需要將標準錯誤重定向到日志文件,可以使用重定向符號>/>>重定向錯誤。

ls file2 > file
ls: cannot access 'file2': No such file or directory

重定向錯誤

正如引言所提到文件描述符2是標準錯誤,因此我們將文件描述符2放在重定向符號之前來重定向錯誤。

假設當前目錄不存在文件xfile,現在運行ls -l xfile 2> log命令將會把錯誤重定向到文件log,2>表示重定向標準錯誤。

如您所見錯誤消息并沒有打印在屏幕,而是寫入到文件,你可以運行cat命令查看文log文件內容。

ls -l xfile 2> log

重定向錯誤與標準輸出

要重定向錯誤和標準輸出,您必須在每個重定向符號之前添加正確的文件描述符。在同一命令可以使用多個重定向符號來實現標準錯誤和標準錯誤的重定向。

假設當前目錄存在文件file1,但不存在文件file2?,F在運行命令ls flie1 file2將會同時產生標準錯誤和標準輸出。

出于某種原因,你可能需要標準錯誤寫入到文件error.log,而標準輸出寫入文件access.log。

此時你就可以使用文件描述1和重定向符號>寫入到access.log文件,組合之后的符號是1>

使用文件描述符2和重定向符好>送到寫入到error.log文件,組合之后的符號是2>。因此最終的命令是ls file1 file2 2> error.log 1> access.log

除此之外您還可以使用&>符號將標準輸出和標準錯誤重定向到同一個文件。例如命令ls file1 file2 &> log

ls file1 file2 2> error.log 1> access.log
ls file1 file2 &> log

永久重定向

輸出重定向有兩種方式臨時重定向和永久重定向。對于 臨時重定向 ,您可以使用>或者>>符號。如果您有很多數據需要重定向,您可以使用exec命令進行永久重定向。

永久重定向并不是真的就一直唯一類型的重定向,可以隨時使用exec命令進行修改。

永久重定向相當于為進程創建一個文件描述符,接下來運行命令的標準輸出,標準錯誤,標準輸入都使用同一文件描述符。

例如std.sh腳本將會重定向exec命令之后的所有標準輸出,也就是echo生成的標準輸出。如果運行cat命令查看log文件,我們將看到echo命令的標準輸出。

你可以多次使用exec命令多次重定向不同的文件描述符,例如命令exec 2> error.log將標準錯誤重定向到文件error.log。

std.sh

#!/bin/bash
exec 1> log #永久重定向標準輸出
echo "Permanent redirection"
echo "from a shell to a file."
echo "without redirecting every line"


exec 2> error.log #永久重定向標準錯誤
echo "Script Begining ..."
echo "Redirecting Output"

除了使用exec命令重定向標準輸出,標準錯誤。你還可以使用exec命令重定向標準輸入。默認的標準輸入STDIN,也就是文件描述符1,通常是鍵盤。

命令exec 0< log 將使用log文件作為標準輸入STDIN,而不是默認的鍵盤。通常Linux系統管理員使用這種技術來讀取日志文件進行處理。

stdin.sh腳本很簡單。您應該知道如何使用read 命令獲取用戶輸入。如果將文件重定向到標準輸入STDIN,read命令將嘗試讀取文件的內容。

stdin.sh

#!/bin/bash
exec 0< testfile
total=1
while read line; do
  echo "#$total: $line"
  total=$(($total + 1))
done

nohup命令重定向標準錯誤和標準輸出

有時候您可能不想看到任何輸出。我們將輸出重定向到黑洞,也就是空設備文件/dev/null。這種情況在使用nohup命令啟動后臺進程時常見。

在使用nohup命令啟動后臺進程時你可能見過符號2>&1,但很少使用這種方式2> /dev/null 1> /dev/null重定向到空設備文件/dev/null。

其實ls -al file1 file2 2> /dev/null 1> /dev/nullls -al file1 file2 > /dev/null 2>&1是不相等的命令。

2> /dev/null 1> /dev/null是直接將標準錯誤重定向到空設備文件,而> /dev/null 2>&1是將標準錯誤先重定向到標準輸出,然后再重定向到空設備文件。

ls -al file1 file2 2> /dev/null 1> /dev/null
ls -al file1 file2 > /dev/null 2>&1

如果2>&1是將標準錯誤信息重定向到標準輸出,你可能會想問2>1結果是什么,我們可以運行命令ls -al file1 file2 2>1來驗證這一點。

運行命令后你可能注意到當前目錄存在文件1,運行命令cat 1你會發現標準錯誤都寫入文件1。

也就是說2>1會將標準錯誤重定向到文件1里面,所以2>&1中的&1指標準輸出。

ls -al file1 file2 2>1
cat 1
ls: cannot access 'file2': No such file or directory

結論

現在您了解標準輸入、標準輸出、標準錯誤以及如何重定向它們。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11123

    瀏覽量

    207886
  • Shell
    +關注

    關注

    1

    文章

    359

    瀏覽量

    23191
  • 腳本
    +關注

    關注

    1

    文章

    382

    瀏覽量

    14760
收藏 人收藏

    評論

    相關推薦

    C語言基礎知識(2)--標準輸入輸出

    printf是C語言的標準輸出函數,般用于向標準輸出設備按規定格式輸出信息。
    的頭像 發表于 06-12 14:21 ?4624次閱讀
    C語言基礎知識(2)--<b class='flag-5'>標準</b><b class='flag-5'>輸入輸出</b>

    真假電工的四個標準,定要記住.#電工知識

    標準電工基礎
    學習電子知識
    發布于 :2022年10月13日 19:56:35

    #PLC 設計PLC程序標準步驟.

    plc標準C程序
    學習電子知識
    發布于 :2022年10月25日 15:07:18

    ISO15693中標準

    ISO15693中標準ISO (the International Organisation for Standardization) and IEC (the International
    發表于 11-25 11:57

    EMC標準了解

    般是用于民用,室內環境的產品。ClassI是指3Pin輸入,帶保護接地的產品。ClassII是指2Pin輸入,不帶保護接地的產品。 4,經常申請的EMC標準有那些?(按出口地區分) 1,歐盟常用的
    發表于 07-28 13:47

    【測試之王LabVIEW】標準錯誤輸入(standard error in)

    打開即時幫助(context help),將鼠標移動到帶錯誤輸入/輸出(error in/out)的節點(node)上,點擊詳細幫助信息(detailed help)查看LabVIEW幫助
    發表于 11-25 11:08

    標準IO的介紹

    緩沖行緩沖:當在輸入輸出中遇到換行符('\n')時,進行IO操作,當流和個終端相關聯時,典型的行緩沖無緩沖:數據直接寫入文件,流不進行緩沖,常見的錯誤
    發表于 04-26 09:53

    Shell標準輸出標準錯誤概述

    Shell標準輸出、標準錯誤 devnull 2&1
    發表于 07-15 15:28

    詳解EMC標準結構和分類

    大家都知道款產品的研發到落地都需要進行測試認證,EMC標準和認證這個里面的門道很多,該如何理解EMC標準結構和分類,EMC標準怎么針對不同產品進行不同的認證
    發表于 10-21 14:43

    解讀HEVC視頻標準的環內濾波,看完你就懂了

    解讀HEVC視頻標準的環內濾波,看完你就懂了
    發表于 06-03 06:08

    醫用 PCB 組裝: 了解這些法規和標準

    長壽命的醫療設備。了解設備的常見故障點并設計個健壯的產品可以提高設備的使用壽命。醫用多氯聯苯組裝標準和規范概述:醫療設備用于各種醫療保健目的,如監測,診斷,外科手術程序等。這些設計的法規要求非常嚴格。但是
    發表于 03-17 19:17

    關于WinAVR-20060421中的標準輸入輸出

    WinAVR20060421對標準輸入輸出對象連接設備的形勢進行了改進,導致本書中多個例子在WinAVR20060421中無法編譯。下面先解釋新版本中標準
    發表于 07-02 17:21 ?35次下載

    解析C語言入門基礎之輸入輸出

    scanf則用來從標準輸入中讀取信息。 那么什么是標準輸入標準輸出呢? 在Linux中進程通常
    的頭像 發表于 05-31 14:05 ?3635次閱讀

    詳解pcb漲縮標準是多少

    詳解pcb漲縮標準是多少
    的頭像 發表于 10-12 10:36 ?3135次閱讀

    詳解pcb線路板的ipc標準

    詳解pcb線路板的ipc標準
    的頭像 發表于 12-15 14:47 ?6328次閱讀