在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文了解標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)錯誤

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

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

在本教程中我們說明Shell腳本中必不可少的知識,即標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和重定向。

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

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

您需要完全理解這三個概念,因?yàn)樗荢hell腳本或者程序的支柱。因此,我們將詳細(xì)描述它們中的每一個。

標(biāo)準(zhǔn)輸入

STDIN代表標(biāo)準(zhǔn)輸入,也就是文件描述符1,默認(rèn)為鍵盤。您可以使用重定向符號<將指定文件作為標(biāo)準(zhǔn)輸入。

如果你將標(biāo)準(zhǔn)輸入替換為文件,重定向符號<會將的文件數(shù)據(jù)作為標(biāo)準(zhǔn)輸入傳遞給指定的程序。

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

cat命令接收標(biāo)準(zhǔn)輸入后,又將archive.tar文件內(nèi)容寫入標(biāo)準(zhǔn)輸出,最后通過管道傳遞給gzip命令進(jìn)行壓縮。

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

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

STDOUT代表標(biāo)準(zhǔn)輸出,也就是文件描述符2,默認(rèn)為屏幕。您可以使用重定向符號>>>將標(biāo)準(zhǔn)輸出重定向到文件。

您可以使用重定向符號>>將數(shù)據(jù)追加到指定文件。例如命令pwd >> log會將pwd命令的標(biāo)準(zhǔn)輸出追加到文件log。

而重定向符號>則會使用標(biāo)準(zhǔn)輸出覆蓋指定文件。例如命令> filename將會清空文件filename

pwd >> log
> filename

標(biāo)準(zhǔn)錯誤

ls file2 > file命令嘗試使用重定向>符號將標(biāo)準(zhǔn)輸出重定向到文件。如果你的計算機(jī)沒有xfile文件。

ls命令將會打印一個錯誤ls: cannot access 'file2': No such file or directory,這通常稱為標(biāo)準(zhǔn)錯誤STDERR

默認(rèn)情況下,Shell將標(biāo)準(zhǔn)錯誤發(fā)送到屏幕。如果您需要將標(biāo)準(zhǔn)錯誤重定向到日志文件,可以使用重定向符號>/>>重定向錯誤。

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

重定向錯誤

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

假設(shè)當(dāng)前目錄不存在文件xfile,現(xiàn)在運(yùn)行ls -l xfile 2> log命令將會把錯誤重定向到文件log,2>表示重定向標(biāo)準(zhǔn)錯誤。

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

ls -l xfile 2> log

重定向錯誤與標(biāo)準(zhǔn)輸出

要重定向錯誤和標(biāo)準(zhǔn)輸出,您必須在每個重定向符號之前添加正確的文件描述符。在同一命令可以使用多個重定向符號來實(shí)現(xiàn)標(biāo)準(zhǔn)錯誤和標(biāo)準(zhǔn)錯誤的重定向。

假設(shè)當(dāng)前目錄存在文件file1,但不存在文件file2。現(xiàn)在運(yùn)行命令ls flie1 file2將會同時產(chǎn)生標(biāo)準(zhǔn)錯誤和標(biāo)準(zhǔn)輸出。

出于某種原因,你可能需要標(biāo)準(zhǔn)錯誤寫入到文件error.log,而標(biāo)準(zhǔn)輸出寫入文件access.log。

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

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

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

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

永久重定向

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

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

永久重定向相當(dāng)于為進(jìn)程創(chuàng)建一個文件描述符,接下來運(yùn)行命令的標(biāo)準(zhǔn)輸出,標(biāo)準(zhǔn)錯誤,標(biāo)準(zhǔn)輸入都使用同一文件描述符。

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

你可以多次使用exec命令多次重定向不同的文件描述符,例如命令exec 2> error.log將標(biāo)準(zhǔn)錯誤重定向到文件error.log

std.sh

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


exec 2> error.log #永久重定向標(biāo)準(zhǔn)錯誤
echo "Script Begining ..."
echo "Redirecting Output"

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

命令exec 0< log 將使用log文件作為標(biāo)準(zhǔn)輸入STDIN,而不是默認(rèn)的鍵盤。通常Linux系統(tǒng)管理員使用這種技術(shù)來讀取日志文件進(jìn)行處理。

stdin.sh腳本很簡單。您應(yīng)該知道如何使用read 命令獲取用戶輸入。如果將文件重定向到標(biāo)準(zhǔn)輸入STDIN,read命令將嘗試讀取文件的內(nèi)容。

stdin.sh

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

nohup命令重定向標(biāo)準(zhǔn)錯誤和標(biāo)準(zhǔn)輸出

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

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

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

2> /dev/null 1> /dev/null是直接將標(biāo)準(zhǔn)錯誤重定向到空設(shè)備文件,而> /dev/null 2>&1是將標(biāo)準(zhǔn)錯誤先重定向到標(biāo)準(zhǔn)輸出,然后再重定向到空設(shè)備文件。

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

如果2>&1是將標(biāo)準(zhǔn)錯誤信息重定向到標(biāo)準(zhǔn)輸出,你可能會想問2>1結(jié)果是什么,我們可以運(yùn)行命令ls -al file1 file2 2>1來驗(yàn)證這一點(diǎn)。

運(yùn)行命令后你可能注意到當(dāng)前目錄存在文件1,運(yùn)行命令cat 1你會發(fā)現(xiàn)標(biāo)準(zhǔn)錯誤都寫入文件1。

也就是說2>1會將標(biāo)準(zhǔn)錯誤重定向到文件1里面,所以2>&1中的&1指標(biāo)準(zhǔn)輸出。

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

結(jié)論

現(xiàn)在您了解標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)錯誤以及如何重定向它們。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11320

    瀏覽量

    209841
  • Shell
    +關(guān)注

    關(guān)注

    1

    文章

    366

    瀏覽量

    23412
  • 腳本
    +關(guān)注

    關(guān)注

    1

    文章

    391

    瀏覽量

    14891
收藏 人收藏

    評論

    相關(guān)推薦

    C語言基礎(chǔ)知識(2)--標(biāo)準(zhǔn)輸入輸出

    printf是C語言的標(biāo)準(zhǔn)輸出函數(shù),般用于向標(biāo)準(zhǔn)輸出設(shè)備按規(guī)定格式輸出信息。
    的頭像 發(fā)表于 06-12 14:21 ?6032次閱讀
    C語言基礎(chǔ)知識(2)--<b class='flag-5'>標(biāo)準(zhǔn)</b><b class='flag-5'>輸入輸出</b>

    真假電工的四個標(biāo)準(zhǔn)定要記住.#電工知識

    標(biāo)準(zhǔn)電工基礎(chǔ)
    學(xué)習(xí)電子知識
    發(fā)布于 :2022年10月13日 19:56:35

    #PLC 設(shè)計PLC程序標(biāo)準(zhǔn)步驟.

    plc標(biāo)準(zhǔn)C程序
    學(xué)習(xí)電子知識
    發(fā)布于 :2022年10月25日 15:07:18

    ISO15693中標(biāo)準(zhǔn)

    ISO15693中標(biāo)準(zhǔn)ISO (the International Organisation for Standardization) and IEC (the International
    發(fā)表于 11-25 11:57

    EMC標(biāo)準(zhǔn)了解

    般是用于民用,室內(nèi)環(huán)境的產(chǎn)品。ClassI是指3Pin輸入,帶保護(hù)接地的產(chǎn)品。ClassII是指2Pin輸入,不帶保護(hù)接地的產(chǎn)品。 4,經(jīng)常申請的EMC標(biāo)準(zhǔn)有那些?(按出口地區(qū)分) 1,歐盟常用的
    發(fā)表于 07-28 13:47

    【測試之王LabVIEW】標(biāo)準(zhǔn)錯誤輸入(standard error in)

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

    標(biāo)準(zhǔn)IO的介紹

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

    Shell標(biāo)準(zhǔn)輸出標(biāo)準(zhǔn)錯誤概述

    Shell標(biāo)準(zhǔn)輸出標(biāo)準(zhǔn)錯誤 devnull 2&1
    發(fā)表于 07-15 15:28

    詳解EMC標(biāo)準(zhǔn)結(jié)構(gòu)和分類

    大家都知道款產(chǎn)品的研發(fā)到落地都需要進(jìn)行測試認(rèn)證,EMC標(biāo)準(zhǔn)和認(rèn)證這個里面的門道很多,該如何理解EMC標(biāo)準(zhǔn)結(jié)構(gòu)和分類,EMC標(biāo)準(zhǔn)怎么針對不同產(chǎn)品進(jìn)行不同的認(rèn)證
    發(fā)表于 10-21 14:43

    解讀HEVC視頻標(biāo)準(zhǔn)的環(huán)內(nèi)濾波,看完你就懂了

    解讀HEVC視頻標(biāo)準(zhǔn)的環(huán)內(nèi)濾波,看完你就懂了
    發(fā)表于 06-03 06:08

    醫(yī)用 PCB 組裝: 了解這些法規(guī)和標(biāo)準(zhǔn)

    長壽命的醫(yī)療設(shè)備。了解設(shè)備的常見故障點(diǎn)并設(shè)計個健壯的產(chǎn)品可以提高設(shè)備的使用壽命。醫(yī)用多氯聯(lián)苯組裝標(biāo)準(zhǔn)和規(guī)范概述:醫(yī)療設(shè)備用于各種醫(yī)療保健目的,如監(jiān)測,診斷,外科手術(shù)程序等。這些設(shè)計的法規(guī)要求非常嚴(yán)格。但是
    發(fā)表于 03-17 19:17

    關(guān)于WinAVR-20060421中的標(biāo)準(zhǔn)輸入輸出

    WinAVR20060421對標(biāo)準(zhǔn)輸入輸出對象連接設(shè)備的形勢進(jìn)行了改進(jìn),導(dǎo)致本書中多個例子在WinAVR20060421中無法編譯。下面先解釋新版本中標(biāo)準(zhǔn)
    發(fā)表于 07-02 17:21 ?35次下載

    解析C語言入門基礎(chǔ)之輸入輸出

    scanf則用來從標(biāo)準(zhǔn)輸入中讀取信息。 那么什么是標(biāo)準(zhǔn)輸入標(biāo)準(zhǔn)輸出呢? 在Linux中進(jìn)程通常
    的頭像 發(fā)表于 05-31 14:05 ?3803次閱讀

    詳解pcb漲縮標(biāo)準(zhǔn)是多少

    詳解pcb漲縮標(biāo)準(zhǔn)是多少
    的頭像 發(fā)表于 10-12 10:36 ?3863次閱讀

    詳解pcb線路板的ipc標(biāo)準(zhǔn)

    詳解pcb線路板的ipc標(biāo)準(zhǔn)
    的頭像 發(fā)表于 12-15 14:47 ?7886次閱讀
    主站蜘蛛池模板: 国产精品夜夜春夜夜| 欧美人成一本免费观看视频| 天堂在线中文字幕| 69 hd xxxx日本| 在线视频 二区| 日本不卡在线视频高清免费 | 在线色资源| 狠狠干b| 国产美女被艹| 黄色片xxxx| 激情性爽三级成人| 欧美黄色大全| 亚洲综合在线观看一区www| 婷婷国产在线| 91啦中文在线观看| 色91视频| 亚色成人| 欧美人与动欧交视频| 欧美午夜小视频| 黄色888| 黄色片视频网| 999色综合| 在线观看s色| 久久久久久久久久免观看 | 国产精品资源站| 午夜免费网站| 边摸边吃奶边做视频叫床韩剧 | 性欧美hd| 男人和女人在床做黄的网站 | 在线99热| 五月激情婷婷丁香| 亚洲youjizz| 欧美日韩a级a| 一本大道加勒比久久| 国产午夜精品一区二区三区| 视频一区二区中文字幕| 天堂在线www| 国产人免费人成免费视频| 色多多福利网站| 久久久久国产精品| 一区二区三区网站|