使用“屏幕”命令输出redirect

可能是一个简单的问题,但我正在远程运行CentOS 5.4命令行。 我想redirect一个简单的Java文件的输出,可以说循环在控制台中打印十万个数字到一个文本文件。 事情是,我必须使用'screen'命令才能够在后台运行它,即使我失去了与远程计算机的会话,并且此命令也不会写入所需的文件。

我尝试了方法screen java MyClass >& log.txtscreen java MyClass > log.txt但它不写入文件。 为什么会发生这种情况,有没有解决办法?

谢谢!

你可以用nohup命令来做到这一点。 这是一个例子。

 $ cat Foo.java public class Foo { public static void main(String[] args) throws InterruptedException { for(int i = 0 ; i < 1000 ; i++) { System.out.println(i); Thread.sleep(1000); } } } $ javac Foo.java $ nohup java Foo > foo.txt & [3] 29542 $ cat foo.txt 0 1 2 3 4 5 $ exit 

“重新启动壳”

 $ cat foo.txt 0 1 ... 29 30 

这不适用于screen的原因是因为screen不像shell那样解释你的参数。 如果你是用screen来做这件事,

 screen /bin/bash -c 'java Foo > foo.txt' 

sample_script.sh

 #!/bin/bash #start screen in detached mode with session name 'default_session' screen -dmS "default_session" #redirect output to abc.log screen -S default_session -X stuff "script -f /tmp/abc.log\n" #execute your command screen -S default_session -X stuff "your command goes here...\n"