Io-Redirection

獲取正在執行的程序的輸出重定向部分

  • December 2, 2019

有時我執行作業,我忘記了我已將輸出重定向到哪些輸出文件。如何獲得執行作業的完整命令,包括輸出重定向部分?

例如,當我執行

nohup python3 -c $'from time import sleep;\nfor i in range(100): print(i); sleep(1)' > .test.txt &

它應該列印一些東西.test.txt並執行 100 秒,然後執行ps -fp <PID>或檢查/proc/<PID>/cmdline,我只得到

python3 -c from time import sleep; for i in range(100): print(i); sleep(1)

我已經嘗試了一些關於如何將命令行參數傳遞給 unix/linux 系統上正在執行的程序的解決方案?,但我認為我的命令沒有被截斷。

我注意到如果我在其中執行命令的外殼在作業完成時仍然打開,它會顯示完整路徑,例如

[1]+  Done                    nohup python3 -c 'from time import sleep;
for i in range(100): print(i); sleep(1)' > .test.txt

此資訊是否僅儲存在執行該作業的 shell 中?

編輯: @muru 我剛剛意識到history畢竟給了我我的命令;謝謝。

如果您有正在執行的程序的 pid,那麼ls -l /proc/${pid}/fd將向您顯示 stdout (fd 1) 和 stderr (fd 2) 的寫入位置。

單個“>”將覆蓋文件,請嘗試使用附加到文件末尾的“>>”。

[admin@srv1 ~]$ for x in $(seq 1 100); do echo $x >> test.txt; done
[admin@srv1 ~]$ head -n 25 test.txt
1
2
...                                                                                                                                                                                                    

引用自:https://unix.stackexchange.com/questions/555113