-1

我使用 C++ 应用程序计算结果,然后使用 echo 在 Fedora linux 中名为 a 的文件中打印结果。

#!/bin/bash

cd myapp
out=`time ./cppcode`
cd ..
echo $out >> a

我正在使用 ssh 并且 myapp 的平均运行时间是 2 小时,所以经常 ssh 连接消失并且终端停止响应。我仍然可以通过另一个终端 ssh 并使用它top来查看我的应用程序正在运行,但 2 小时后没有结果保存到文件中。

我相信如果我执行一行命令,结果就会被打印出来。你能告诉我如何将这个脚本重写为一行吗?

4

3 回答 3

0

To try and perform the same thing with a single command:

#!/bin/bash
time myapp/cppcode 2>> a

should do it

(Assuming cppcode doesn't rely on the CWD being the myapp folder)

Though basically you're finding that subsequent commands don't get executed after your ssh connection fails

so

#!/bin/bash

cd myapp
time ./cppcode 2>> ../a
cd ..

should at least ensure the output always gets written (since the only command to get lost would be the cd .. )

于 2013-10-28T14:19:24.597 回答
0

相信将脚本更改为单行会对您有所帮助。您可以自己尝试一下:

cd myapp; out=`time ./cppcode`; cd ..; echo $out >> a

或更简单:

(cd myapp; time ./cppcode) >> a

请注意,仅重定向 stdout 永远不会捕获time命令的输出。如果你想重定向它,你可以添加 sth like2>> a.time_results或简单地添加2>&1以将其重定向到a

我宁愿认为您的连接已关闭,因为它的空闲时间太长(十分钟左右没有传输数据)。

解决此类问题的典型方法是实现相当流畅的输出,例如通过打印进度(可能是进度条或不时的简单点)。

另一种方法是使用终端多路复用器screen,以便以后能够重新连接到正在运行的会话,即使您的 ssh 连接在此期间中断。只需 start ssh,然后在那个 shell startscreen中,然后在那个屏幕中开始你真正的东西。如果您的连接中断,只需启动ssh然后screen -x重新连接到正在运行的屏幕会话。

于 2013-10-28T14:15:51.180 回答
-1
cd myapp
time ./cppcode >> ../a 

or if your app doesn't depend on the current directory:

time myapp/cppcode >> a 
于 2013-10-28T14:21:23.070 回答