<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                #### 重定向 最常見的標準輸入(stdin)、標準輸出(stdout)和標準錯誤輸出(stderr)的文件描述符分別是0、1和2,其中0、1、2也可以認為是它們的數字代號。對于輸出信息,可以認為是打印在屏幕上的信息,而沒給出錯誤的就是標準輸出,給出錯誤提示的是標準錯誤輸出,當然這樣說明有失偏頗,但是易于理解。還可以自定義自己的描述符,實現高級重定向,在以后的文章中可能會介紹一下它們的用法。 > 標準輸入 = /dev/stdin = 代號0 = <符號(注意,沒有包含<<符號)。 > > 標準輸出 = /dev/stdout = 代號1 = >或>>符號。 > > 標準錯誤輸出 = /dev/stderr = 代號2 = 使用2>或2>>符號。 注意,上面的/dev/std{in,out,err}分別是0、1、2**默認的輸出目標,當重定向后,就不再使用這些目標**。具體見后文。 、2>實現的是覆蓋功能,>>、2>>實現的是追加的功能,但是注意"<<"不是追加功能,而是表示此處生成文檔(here document),在后面cat和重定向配合的內容里有說明。此外,還有<<<,它表示此處字符串(here string),也見下文。 有時候,使用"-"也表示/dev/stdin。如: ~~~ [root@xuexi ~]# cat /etc/fstab | cat - ~~~ **腳本中常見2>&1和&>以及&>>的符號,它們都表示將stdout和stderr都重定向到同一個地方去,即重定向所有輸出內容**。如最常見的"&> /dev/null"。 **注意:** **(1).重定向操作是shell最先解析到的,在執行命令之前,重定向就會先打開文件以確定輸入、輸出的位置。如果是重定向輸出操作,則先截斷文件使其為空。** **(2)./dev/stdin、/dev/stdout、/dev/stderr等設備只是數據默認的流向目標(嚴格地說是文件描述符0、1、2的輸出目標),它們不等價于"標準輸入0、標準輸出1、標準錯誤2"。之所以稱為"重定向",就是將數據的流向改變,不再輸入到這些默認設備中。** **(3).重定向的順序很重要。** 例如 **ls / >file1 2>&1** 表示先打開file1作為標準輸出(fd=1)的目的地,然后再將標準錯誤綁定到標準輸出(已經是file1)上,這樣無論是標準錯誤還是標準輸出都重定向到file1中。它等價于 **ls / &>file1** 。"&"符號表示描述符重用(fd 2 duplicate from fd 1),有些人將其翻譯為文件描述符的復制, 2>&1 翻譯為標準錯誤是標準輸出的復制、副本,這樣的翻譯非常容易產生誤解,且很難結合已有知識去理解清楚。關鍵是很多書上就是這么解釋的,讓人費解,誤導一大片人以為這是高級重定向。**直接將其理解為文件描述符2綁定到文件描述符1上,或者文件描述2重用文件描述符1即可。** **而 ls / 2>&1 >file1 表示先將標準錯誤綁定到標準輸出,此時標準輸出還是/dev/sdtout(即屏幕),因此標準錯誤的輸出目標是/dev/stdout(屏幕)。之后再打開file1作為標準輸出的目標。因此,它最終將標準錯誤重定向到/dev/stdout,將標準輸出重定向到file1。可以讓ls命令產生錯誤來測試, ls dlfjasl 2>&1 >file1 ,結果將直接顯示在屏幕上**。 .. ## cat和重定向配合 配合cat使用可以分行輸入內容到文件中。 ~~~ [root@xuexi tmp]# cat <<eof>log.txt ? # 覆蓋的方式輸入到log.txt > this is stdin character > eof ~~~ 也可以使用下面的方法。 ~~~ [root@xuexi tmp]# cat >log1.txt <<eof > this is stdin character first! > eof ~~~ 一方面,eof部分都必須使用"<<eof",**它表示here document,此后輸入的內容都作為一個document輸入給cat。既然是document,那就肯定有document結束符標記document到此結束,結束符使用的是here document后的字符,**例如此處為eof。其實不使用eof,使用其他字符也是一樣的,但document的結束符也必須要隨之改變。如: ~~~ [root@xuexi ~]# cat <<abcx > 123 > 345 > abcx 123 345 ~~~ 另一方面,>log1.txt表示將document的內容覆蓋到log1.txt文件中,如果是要追加,則使用>>log1.txt。所以,追加的方式如下: ~~~ [root@xuexi tmp]# cat >>log1.txt <<eof > this is stdin character first! > eof ~~~ 或 ~~~ [root@xuexi tmp]# cat <<eof>>log1.txt > this is stdin character first! > eof ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看