熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> 嵌入式開發 >> 正文

關於shell命令的定向輸出 2>&1

2022-06-13   來源: 嵌入式開發 

  mycommand >mylogtxt >& 應該是最經典的用法了

  命令的結果可以通過%>的形式來定向輸出%表示文件描述符為標准輸出stdout為標准錯誤stderr系統默認%值是也就是>>可以簡寫為>也就是默認為>stdout的默認目標是終端stderr的默認目標為也是終端我們在批處理中執行 echo text >resulttxt 我們就可以在屏幕上會看到 echo text >resulttxt 即是這個道理

  其中&需要直接與重定向符號結合使用

  參考
%>>%
ibrary/ServerHelp/aabdcdccebmspx?mfr=true

  應用實例

  將結果輸出到resulttxt
net stop myservices >>result >&

  隱藏程序輸出結果
net stop myservices >nul >nul

  微軟關於重定向的文章 使用命令重定向操作符

  更新日期 //

使用命令重定向操作符

  可以使用重定向操作符將命令輸入和輸出數據流從默認位置重定向到其他位置輸入或輸出數據流的位置稱為句柄

  下表將列出可用的句柄

   cellPadding=> >  句柄 句柄的數字代號 BORDERRIGHT: #cccccc px solid>描述

  STDIN

  

BORDERRIGHT: #cccccc px solid>

  鍵盤輸入

  STDOUT

  

BORDERRIGHT: #cccccc px solid>

  輸出到命令提示符窗口

  STDERR

  

BORDERRIGHT: #cccccc px solid>

  錯誤輸出到命令提示符窗口

  UNDEFINED

  

BORDERRIGHT: #cccccc px solid>

  句柄由應用程序單獨定義它們是各個工具特有的

  數字 代表前 個句柄可以使用命令 Cmdexe 運行程序並對該程序前 個句柄中的任何一個句柄進行重定向要指定要用的句柄請在重定向操作符之前鍵入該句柄的數字如果未定義句柄則默認的 < 重定向輸入操作符是 而默認的 > 重定向輸出操作符是 鍵入 < 或 > 操作符之後必須指定數據的讀寫位置可以指定文件名或其他現有的句柄

  要指定重定向到現有句柄請使用與 (&) 字符後面接要重定向的句柄號(即 &句柄號例如下面的命令可以將句柄 (即 STDERR)重定向到句柄 (即 STDOUT)

  >&

  下表列出了可用於重定向輸入和輸出數據流的操作符

  E cellSpacing= cellPadding=> >  重定向操作符 BORDERRIGHT: #cccccc px solid>描述

  >

BORDERRIGHT: #cccccc px solid>

  將命令輸出寫入到文件或設備(如打印機)而不是命令提示符窗口或句柄

  <

BORDERRIGHT: #cccccc px solid>

  從文件而不是從鍵盤或句柄讀入命令輸入

  >>

BORDERRIGHT: #cccccc px solid>

  將命令輸出添加到文件末尾而不刪除文件中已有的信息

  >&

BORDERRIGHT: #cccccc px solid>

  將一個句柄的輸出寫入到另一個句柄的輸入中

  <&

BORDERRIGHT: #cccccc px solid>

  從一個句柄讀取輸入並將其寫入到另一個句柄輸出中

  |

BORDERRIGHT: #cccccc px solid>

  從一個命令中讀取輸出並將其寫入另一個命令的輸入中也稱作管道

  默認情況下可以從鍵盤將命令輸入(即 STDIN 句柄)發送到 Cmdexe然後由 Cmdexe 將命令輸出(即 STDOUT 句柄)發送到命令提示符窗口

重定向輸入 (<)

  要通過鍵盤將輸入重定向到文件或設備請使用 < 操作符例如要從 Filetxt 獲取 sort 命令的輸入請鍵入

  sort<filetxt

  Filetxt 的內容將以字母順序列表的方式顯示在命令提示符窗口中

  < 操作符可以打開具有只讀訪問權限的指定文件名因此不能在使用該操作符時向文件中寫入信息例如如果以 <& 啟動程序則所有試圖讀取句柄 的操作都將失敗因為句柄 最初是以只寫訪問方式打開的

  注意

   cellPadding= border=> &#;

   是 < 重定向輸入操作符的默認句柄

重定向輸出 (>)

  幾乎所有的命令都將輸出發送到命令提示符窗口即使將輸出發送到驅動器或打印機的命令也會在命令提示符窗口顯示消息和提示

  要將輸出從命令提示符窗口重定向到文件或設備請使用 > 操作符可以在許多命令中使用該操作符例如要將 dir 輸出重定向到 Dirlisttxt請鍵入

  dir>dirlisttxt

  如果 Dirlisttxt 不存在Cmdexe 將創建該文件如果 Dirlisttxt 存在Cmdexe 將使用 dir 命令的輸出替換文件中的信息

  要運行 netsh routing dump 命令然後將輸出發送到 Routecfg請鍵入

  netsh routing dump>c:\routecfg

  > 操作符可以打開具有只寫訪問權限的指定文件因此不能使用該操作符讀取文件例如如果使用重定向操作符 >& 啟動程序則寫入句柄 的所有嘗試操作都將失敗因為句柄 最初是以只讀訪問方式打開的

  注意

   cellPadding= border=> &#;

   是 > 重定向輸出操作符的默認句柄

復制句柄

  重定向操作符 & 可以將輸出或輸入從一個指定句柄復制到另一個指定的句柄例如要將 dir 輸出發送到 Filetxt 並將錯誤輸出發送到 Filetxt請鍵入

  dir>c:\filetxt >&

  復制句柄時可以復制該句柄原狀態的所有特性例如如果一個句柄具有只讀訪問的屬性則該句柄的所有副本都具有只讀訪問屬性不能將一個具有只讀訪問屬性的句柄復制到另一個具有只寫訪問屬性的句柄

使用 & 操作符重定向輸入和副本

  要將重定向輸入操作符 (<) 與復制操作符 (&) 結合使用指定的文件必須已經存在如果輸入文件存在Cmdexe 將以只讀方式打開該文件然後將文件包含的字符作為輸入發送到此命令(如同從鍵盤輸入一樣)如果指定了句柄Cmdexe 將指定的句柄復制到系統現有的句柄中

  例如要以句柄 輸入讀取(即 STDIN)的方式打開 Filetxt請鍵入

  <filetxt

  要打開 Filetxt並在內容排序後將輸出發送到命令提示符窗口(即 STDOUT)請鍵入

  sort<filetxt

  要查找 Filetxt然後將句柄 (即 STDOUT)和句柄 (即 STDERR)重定向到 Searchtxt請鍵入

  findfile filetxt>searchtxt <&

  要以句柄 輸入讀取(即 STDIN)的方式復制用戶定義的句柄 請鍵入

  <&

使用 & 操作符重定向輸出和復制

  如果將輸出重定向到文件且指定了現有的文件名Cmdexe 將以只寫方式打開文件並覆蓋該文件內容如果指定了句柄Cmdexe 將文件復制到現有句柄中

  要將用戶定義的句柄 復制到句柄 請鍵入

  >&

  要將包括句柄 (即 STDERR)的所有輸出從 ipconfig 命令重定向到句柄 (即 STDOUT)然後將輸出重定向到 Outputlog請鍵入

  ipconfigexe>>outputlog >&

使用 >> 重定向操作符附加輸出

  要從命令中將輸出添加到文件末尾而不丟失文件中已存在的任何信息請使用兩個連續的大於號(即 >>)例如使用下列命令可以將 dir 命令生成的目錄列表附加到 Dirlisttxt 文件

  dir>>dirlisttxt

  要將 netstat 命令的輸出附加到 Tcpinfotxt 的末尾請鍵入

  netstat>>tcpinfotxt

使用管道操作符 (|)

  管道操作符 (|) 可以提取一個命令的輸出(默認情況下是 STDOUT)然後將其定向到另一個命令的輸入(默認情況下是 STDIN)中例如使用下面的命令可以對目錄進行分類

  dir | sort

  在本例中將同時啟動兩個命令但隨後 sort 命令會暫停直到它接收到 dir 命令的輸出為止sort 命令使用 dir 命令的輸出作為輸入然後將輸出發送到句柄 (即 STDOUT)

合並帶重定向操作符的命令

  通過合並帶有其他命令和文件名的篩選器命令可以創建自定義命令例如可以使用以下命令存儲包含LOG字符串的文件名:

  dir /b | find log loglisttxt

  dir 命令的輸出是通過 find 篩選器命令進行發送的包含字符串LOG的文件名作為文件名列表(例如NetshConfiglogLogdatsvd 和 Mylogbat)存儲在文件 Loglisttxt 中

  要在相同命令中使用多個篩選器請使用管道 (|) 分隔篩選器例如下面的命令將搜索 C 盤上的每個目錄以查找包含LOG字符串的文件名並且在命令提示符窗口中每次顯示一屏

  dir c:\ /s /b | find log | more

  利用管道 (|) 可以對 Cmdexe 進行定向使其通過 find 篩選器命令發送 dir 命令輸出find 命令只選擇包含字符串LOG的文件名more 命令可以顯示 find 命令選擇的文件名(在命令提示符窗口中每次顯示一屏)有關篩選器命令的詳細信息請參閱使用篩選器


From:http://tw.wingwit.com/Article/program/qrs/201401/30221.html
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.