c++ - 将多行 shell 脚本转换为一行命令

标签 c++ linux shell ssh

我使用 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/

相关文章:

c++ - mysql c++ 连接器 : How to check for and recover from failed connection without crashing

c++ - 以某种方式用质数填充 vector

linux - 打开多个终端选项卡,执行命令并继续处理它们

linux - 我的 cron 作业没有按预期工作,为什么?

bash - bash shell 脚本中的负数

linux - 如何处理我的 PATH 变量中的重复项?

c++ - 自定义运算符 new[] 请求大于预期的内存

c++ - 更改局部变量的地址

linux - gurobi 已安装,但 Matlab 无法识别它

linux - 为什么我的 shell (sh) 变量在命令模式下没有导出?