有时我运行作业时,我会忘记将输出重定向到哪些输出文件。如何获取运行作业时使用的完整命令,包括输出重定向部分?
例如,当我跑步时
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 系统上正在运行的进程?,但我不认为我的命令被截断。
我注意到,如果我运行命令的 shell 在作业完成时仍然打开,它会显示完整路径,例如
[1]+ Done nohup python3 -c 'from time import sleep;
for i in range(100): print(i); sleep(1)' > .test.txt
此信息仅存储在运行作业的 shell 中吗?
编辑:@muru 我刚刚意识到毕竟history
确实给了我我的命令;谢谢。
答案1
如果您有正在运行的进程的 pid,那么ls -l /proc/${pid}/fd
将显示 stdout (fd 1) 和 stderr (fd 2) 的写入位置。
答案2
单个“>”将覆盖文件,尝试使用附加到文件末尾的“>>”。
[admin@srv1 ~]$ for x in $(seq 1 100); do echo $x >> test.txt; done
[admin@srv1 ~]$ head -n 25 test.txt
1
2
...