我使用 C++ 应用程序来计算结果,然后使用 echo 将结果打印到 Fedora linux 中名为 a 的文件中。
#!/bin/bash
cd myapp
out=`time ./cppcode`
cd ..
echo $out >> a
我正在使用 ssh,myapp 的平均运行时间为 2 小时,因此经常 ssh 连接消失并且终端停止响应。我仍然可以通过另一个终端进行 ssh 并使用 top
查看我的应用程序正在运行,但 2 小时后没有结果保存到文件中。
我相信如果我执行一行命令,就会打印结果。您能告诉我如何将此脚本重写为一行吗?
最佳答案
我不相信将脚本更改为一行会对您有所帮助。您可以自己尝试一下:
cd myapp; out=`time ./cppcode`; cd ..; echo $out >> a
或更简单:
(cd myapp; time ./cppcode) >> a
请注意,仅重定向 stdout 永远不会捕获 time
命令的输出。如果你想重定向它,你可以添加诸如 2>> a.time_results
之类的东西,或者简单地添加 2>&1
将其重定向到 a
。
我宁愿认为您的连接已关闭,因为它的空闲时间太长(十分钟左右没有传输数据)。
解决此类问题的典型方法是实现相当流畅的输出,例如。 G。通过打印进度(可能是进度条或时不时的简单点)。
另一种方法是使用终端多路复用器(例如 screen
),以便稍后能够重新连接到正在运行的 session ,即使您的 ssh 连接在此期间中断。只需启动 ssh
,然后在该 shell 中启动 screen
,然后在该屏幕中启动您真正的东西。如果您的连接中断,只需启动 ssh
,然后启动 screen -x
即可重新连接到正在运行的 screen session 。
关于c++ - 将多行 shell 脚本转换为一行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19636960/