如果我們想儲存程式的列印資訊,為了儲存完整的列印資訊,通常我們會使用以下命令。那這個該怎麼理解呢?
command 2>&1 | tee log『2>&1』的意思是將command**過程中列印的標準輸出和標準錯誤**一併重定向至log檔案中。command > log 2>&1
q:那什麼是標準輸出和標準錯誤,什麼是重定向,標準輸出和標準錯誤又有什麼區別呢?下面一一揭曉:
1. 標準輸出和標準錯誤:
2. 檔案描述符
在linux shell執行命令時,每個程序都和三個開啟的檔案相聯絡,並使用檔案描述符來引用這些檔案。由於檔案描述符不容易記憶,shell同時也給出了相應的檔名:
檔案檔案描述符
c++對應實現
標準輸入
0(預設是鍵盤,為0是檔案或者其他命令的輸出)
std::cin
標準輸出
1(預設是螢幕,為1時是檔案)
std::cout
標準錯誤
2(預設是螢幕,為2時是檔案)
std::cerr
3. 重定向
signal
means
>
將標準輸出重定向至指定檔案
>>
將標準輸出追加到指定檔案後面
2>
標準錯誤重定向至指定檔案
2 >>
標準錯誤追加到指定檔案後面
&無實際意義,表明重定向的是乙個檔案描述符,而不是乙個檔案
2>&1
將標準錯誤重定向至標準輸出,即將標準錯誤放進標準輸出的緩衝buffer中,一併輸出到指定檔案
栗子:下面是標準輸出與標準錯誤的乙個小demo
#includeint main()
輸出至螢幕:./t
螢幕輸出:######hello, this is standard cerr ######hello, this is standard cout ######hello, this is standard cout
// 注意到cerr輸出先於cout,因為cerr是沒有緩衝的,
'>'重定向: ./t > log
螢幕輸出:######hello, this is standard cerr
log檔案:######hello, this is standard cout ######hello, this is standard cout
'2>'重定向: ./t 2> log
螢幕輸出:######hello, this is standard cout ######hello, this is standard cout
log檔案:######hello, this is standard cerr
『2>&1』 重定向: ./t > log 2>&1
螢幕輸出:無
log檔案(保序):######hello, this is standard cout ######hello, this is standard cerr ######hello, this is standard cout
5)'2>&1』重定向: 『command 2>&1 | tee log』
螢幕輸出:######hello, this is standard cout ######hello, this is standard cerr ######hello, this is standard cout
log檔案(保序):######hello, this is standard cout ######hello, this is standard cerr ######hello, this is standard cout
不識廬山真面目
那時候,公司的研發組織結構是矩陣式的。也就是說,存在乙個研發中心這樣的組織,來管理所有的研發資源,資源分為三類 需求 開發 測試。而在其下面,又分n個專案組,每個專案組,會從研發中心,借調需求 開發 測試若干人等,組織成乙個對市場提供產品的專案組。公司做的產品,所以很多專案組的存在時間會比較長。而有...
揭開AssetBundle廬山真面目 一
1 常用打包api public static bool buildassetbundle object mainasset,object assets,string pathname,out uint crc,buildassetbundleoptions assetbundleoptions,b...
揭開AssetBundle廬山真面目(二)
昨天的分享揭開assetbundle廬山真面目 一 我們主要剖析了4.x版本下的assetbundle管理機制,那5.x版本究竟有些什麼變化呢?今天我們來一 竟。1 唯一api public static assetbundlemanifest buildassetbundles string ou...