使用“screen”命令输出重定向

时间:2012-02-27 05:04:22

标签: java linux redirect output gnu-screen

可能是一个简单的问题,但我正在远程运行CentOS 5.4命令行。我想重定向一个简单的Java文件的输出,让我们说循环在控制台中打印十万个数字到文本文件。问题是,我使用'screen'命令能够在后台运行它,即使我松开与远程计算机的会话并且此命令没有写入所需的文件。

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

2 个答案:

答案 0 :(得分:15)

您可以使用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

&LT;&LT;重新启动shell&gt;&gt;

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

这不适用于screen的原因是因为screen不像shell那样解释你的参数。如果您使用screen执行此操作,则可以使用:

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

答案 1 :(得分:1)

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"