我使用C ++应用程序来计算结果,然后使用echo将结果打印在Fedora linux中名为a的文件中。
#!/bin/bash
cd myapp
out=`time ./cppcode`
cd ..
echo $out >> a
我正在使用ssh,myapp的平均运行时间是2小时,所以ssh连接经常消失,终端停止响应。我仍然可以通过另一个终端ssh并使用top
查看我的应用程序正在运行,但2小时后没有结果保存到文件中。
我相信如果我执行单行命令,将打印结果。你能告诉我如何将这个脚本重写为一行吗?
答案 0 :(得分:0)
我不相信将脚本更改为单行会对您有所帮助。你可以自己尝试一下:
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
这样的终端多路复用器,以便稍后能够重新连接到正在运行的会话,即使您的ssh连接在此期间发生故障。只需启动ssh
,然后在该shell中启动screen
,然后在该屏幕内启动您的真实内容。如果您的连接中断,只需启动ssh
,然后screen -x
重新连接到正在运行的屏幕会话。
答案 1 :(得分:0)
尝试用一个命令执行相同的操作:
#!/bin/bash
time myapp/cppcode 2>> a
应该这样做
(假设cppcode
不依赖于CWD是myapp
文件夹)
虽然基本上你发现在ssh连接失败后没有执行后续命令
所以
#!/bin/bash
cd myapp
time ./cppcode 2>> ../a
cd ..
至少应该确保输出总是被写入(因为唯一的命令就是cd ..
)
答案 2 :(得分:-1)
cd myapp
time ./cppcode >> ../a
或者如果您的应用不依赖于当前目录:
time myapp/cppcode >> a