我希望能夠編寫在 tty 中執行的 Portage 命令以及其他命令的輸出(即,以Ctrl+ Alt+開頭的屏幕寬終端,其中 n 代表 1 到 6 之間的整數。這些終端是開始使用命令,據我所知)在沒有剪貼簿的情況下,到文字檔。現在我讀到Fngetty
Ubuntu 論壇如果使用得當,也許 Unix 指令cat
可以做到這一點。不幸的是,按照建議的命令似乎沒有將emerge
命令的完整輸出添加到文字檔案中。看我跑了:
emerge dev-qt/qtwayland > cat >> /home/fusion809/output.txt
其中fusion809是我的用戶名,它只會寫入四行輸出,即:
Calculating dependencies ....... .. ....... done!
[ebuild R ] media-libs/mesa-11.0.4 USE="-wayland*" ABI_X86="32*"
[ebuild R ] dev-qt/qtgui-5.5.1 USE="-egl* -evdev* -ibus*"
[ebuild R ] dev-qt/qtwayland-5.5.1 USE="-egl*"
我也嘗試過:
emerge dev-qt/qtwayland > /home/fusion809/output.txt
和:
emerge dev-qt/qtwayland >> /home/fusion809/output.txt
兩者都將相同的輸出寫入output.txt。
答案1
你走在正確的軌道上。在 Unix/Linux 中還有一個錯誤流。每個命令都有標準輸入、標準輸出和標準誤差。
您一直在使用標準輸出。也要從命令中捕獲標準錯誤流,請使用2>
.例如:
emerge dev-qt/qtwayland > emerge.out 2> emerge.err
現在如果你想要標準輸出和進入錯誤相同的文件,用於2>&1
告訴 shell 將標準錯誤輸出傳送到與標準輸出相同的位置:
emerge dev-qt/qtwayland > emerge.out 2>&1
另外,如果您需要參考和了解更多信息,您可以隨時在 shell 手冊頁中查找man sh
。
感謝您提供資訊豐富且經過深思熟慮的問題!
答案2
你不需要
> cat
那裡。事實上,這只是創建了另一個cat
在當前目錄中調用的檔案。如果您想輸入| cat
,那是多餘的,您可以重定向輸出,而無需透過 cat 進行管道傳輸。emerge dev-qt/qtwayland > /home/fusion809/output.txt
會保存全部指令的 stdout 輸出emerge
到/home/fusion809/output.txt
.所有的。如果檔案中只有 4 行,那是因為emerge
只將 4 行列印到 stdout。emerge 可能已經印製了更多的東西到
stderr
.如果你也想捕捉到這一點,請嘗試emerge dev-qt/qtwayland >& /home/fusion809/output.txt
。這會將 stdout 和 stderr 重新導向到同一個檔案。>
和之間的區別>>
在於,>
如果檔案存在,則在建立檔案之前將其刪除;>>
如果檔案已存在,則將其追加到檔案中;如果不存在則建立檔案(取決於 shell 選項)。如果您想將輸出捕獲到文件中和同時在螢幕上看到它,使用
tee
.例如:
emerge dev-qt/qtwayland |& tee -a /home/fusion809/output.txt
tee
的-a
選項告訴它追加而不是擦除和覆蓋。