【问题标题】:Is it possible to capture a system.out.print from java program in a csh variable?是否可以从 csh 变量中的 java 程序中捕获 system.out.print?
【发布时间】:2009-05-07 11:25:39
【问题描述】:

我知道这样做很蹩脚。我们需要在调用 shell 脚本中捕获一个在 Java 程序中动态生成的字符串,然后在以后使用它。

这也将在现有的 csh 文件中完成。

我们考虑过使用 putenv/setenv 将其导出到环境变量的选项...这是更好的选择吗?如果有怎么用?

网上似乎缺乏关于如何有效使用 sentenv() 或 putenv() 以及为此导入哪些库的示例代码。

具有 getenv() 方法的系统类不显示我的 putenv() 或 setenv()。非常感谢任何帮助。

谢谢。

【问题讨论】:

    标签: java csh


    【解决方案1】:

    你应该可以只使用command substitution,就像在 bash 中一样使用反引号语法(在现在的 bash 中,建议使用更有用的 $-syntax)。像这样:

    $ set A=`java MyProgram`
    $ echo $A
    

    或类似的东西

    你不能使用环境;无法使用它“向后”交流;子进程不能改变父进程的环境。

    更新:在示例中添加了“set”关键字,d'oh。

    【讨论】:

    • 我正在使用 csh ... A=java MyProgram 工作还是我需要使用 set A = java MyProgram
    • 当我使用 A=java MyProgram 时...它给了我一个:找不到命令
    • @Devang:正确,对于 csh,您需要明确使用 'set',我更改了示例。对不起。
    • @unwind:谢谢......但我试过了,它仍然没有返回任何东西。事实上,我有一行简单地调用 java 程序。由于有一个 System.out.println(),我应该会看到一些输出,但我什么也没看到。当我从命令行运行程序时,它运行得非常好。不知道我错过了什么。有没有从 csh 调用 java 的特定方法?它在 ksh 文件中正确工作......现在诅咒遗留的 csh 脚本:)
    • 嘿它的工作......我忽略了一些愚蠢的东西......没有在 shell 脚本中正确地给 Java 程序提供命令行参数。不过感谢您的帮助。
    【解决方案2】:

    从第一个答案延伸:

    您可能想要这样做: $A=java MyProgram | grep <something> $回声$A

    假设 MyProgram 输出不止一行,您想要捕获的内容在哪里。

    如果java程序使用System.err.print...而不是System.out.print...。 你需要增强到 $A=java MyProgram 2>&1 | grep <something>

    希望对你有帮助:-)

    【讨论】:

    • 实际上我需要整个结果...实际上并不需要 grep ...也是我现在的痛点,它可以使其在 csh 脚本中工作。它在 ksh 中运行良好……但 csh 给了我奇怪的错误或什么也不返回……感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 2020-07-17
    相关资源
    最近更新 更多