Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将多行shell脚本转换为一行命令 我使用C++ APP来计算结果,然后用ECHO打印结果到费多拉Linux中的一个文件。 #!/bin/bash cd myapp out=`time ./cppcode` cd .. echo $out >> a_C++_Linux_Shell_Ssh - Fatal编程技术网

将多行shell脚本转换为一行命令 我使用C++ APP来计算结果,然后用ECHO打印结果到费多拉Linux中的一个文件。 #!/bin/bash cd myapp out=`time ./cppcode` cd .. echo $out >> a

将多行shell脚本转换为一行命令 我使用C++ APP来计算结果,然后用ECHO打印结果到费多拉Linux中的一个文件。 #!/bin/bash cd myapp out=`time ./cppcode` cd .. echo $out >> a,c++,linux,shell,ssh,C++,Linux,Shell,Ssh,我正在使用ssh,myapp的平均运行时间是2小时,所以ssh连接经常会消失,终端也会停止响应。我仍然可以通过另一个终端ssh并使用top查看我的应用程序是否正在运行,但2小时后没有结果保存到文件中 我相信如果我执行一行命令,结果就会被打印出来。你能告诉我如何把这个脚本改写成一行吗?我不相信把脚本改成一行会对你有帮助。你可以自己尝试一下: cd myapp; out=`time ./cppcode`; cd ..; echo $out >> a 或更简单: (cd myapp; t

我正在使用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\u results
的内容,或者简单地添加
2>&1
将它重定向到
a

我认为您的连接被关闭是因为它的空闲时间太长(大约十分钟没有传输数据)

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


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

要尝试使用单个命令执行相同的操作,请执行以下操作:

#!/bin/bash
time myapp/cppcode 2>> a
应该这样做

(假设
cppcode
不依赖CWD作为
myapp
文件夹)

虽然基本上您会发现在ssh连接失败后,后续命令不会执行

所以

至少应确保输出总是被写入(因为丢失的唯一命令是
cd..

或者,如果您的应用程序不依赖于当前目录:

time myapp/cppcode >> a 

您可能需要使用
屏幕
。通过屏幕启动脚本,从屏幕会话中分离,去吃一些午餐并重新连接到您的会话以查看进度。考虑运行<代码> NOHUP时间MYAPP/CPPPCODE < /代码>;这将运行命令并计时,输出(标准输出和标准错误)将转到
/nohup.out
。这将忽略
ssh
会话超时时生成的SIGHUP信号(因此
nohup
)。不清楚为什么要执行
回显
;为什么不直接将命令的输出重定向到文件:
/myapp/cppcode>a
或主题的变体。我现在尝试的解决方案确实是
屏幕
。您知道
screen-x
screen-r
之间的区别吗?使用
-x
您也可以附加到未附加的屏幕会话(因此,如果您仍然从其他地方连接到同一会话,它也会起作用)<代码>-r
将仅附加到分离的会话。如果会话已分离,则两者都会执行相同的操作。
cd myapp
time ./cppcode >> ../a 
time myapp/cppcode >> a