今天看RHCE的書,學到了:shell
使用shell能夠啓動圖形界面程序,但只要圖形程序在運行,則啓動的shell就不可用。可使用做業控制符在後臺啓動該程序,這樣前臺還能夠進行其餘操做。方法是在命令後面加 &。命令行的程序也可使用&控制符在後臺執行,但其運行輸出或錯誤仍是會顯示在shell中。ide
因而就想到能夠在shell裏執行一個消耗時間比較長的命令,使用&讓它跑在後臺,最後獲得結果就好了。但運行時的輸出怎麼辦呢?spa
這就涉及到了輸出重定向 。
輸出用>來表示,一、2分別表明標準輸出和標準錯誤輸出。好比1>a.out就是將標準輸出重定向到a.out文件。也能夠將一種輸出重定向到另外一種輸出,注意要使用這樣的格式2>&1。
而後我就實驗一下咯
find / -name 'rhel-source.repo' 1>a.out &
結果a.out 裏面有東西,但shell裏面也輸出了不少東西。
最後發現是由於標準錯誤輸出沒有重定向,纔會把錯誤信息都輸出到shell中。
修改一下命令
find / -name 'rhel-source.repo' 2>&1 1>a.out &
結果仍是輸出了一堆錯誤信息,說明重定向不成功?是什麼緣由呢?
原來是2>&1將標準錯誤輸出重定向到標準輸出,1>a.out將標準輸出重定向到a.out。但前面的2>&1卻不會跟着改變,標準錯誤輸出仍然重定向到標準輸出。個人理解是重定向操做'>'是相似賦值操做'='而不是指針,進行一次重定向它的結果就保存下來了,不會由於右值的改變而改變。
因此命令還得再修改
find / -name 'rhel-source.repo' 1>a.out 2>&1 &
再次執行,shell裏面果真沒有輸出了,所有都保存在a.out中。
另外還能夠將輸出重定向到空/dev/null,這樣這部分輸出就徹底消失。
好比對上面的命令再次修改
find / -name 'rhel-source.repo' 1>a.out 2>/dev/null &
這樣執行的時候,shell中不會有輸出,a.out中也不會有標準錯誤輸出了。
掌握了後臺運行和輸出重定向,就能夠在shell中後臺執行耗時的命令,再去文件中查看結果了。