Tag: shell

在eclipse中运行Java app时如何避免glob扩展

我遇到了Eclipse运行配置的特殊行为,它似乎只是一个Windows问题。 假设我有一个打印出命令行参数的Java应用程序,如下所示: public class WildCard { public static void main(String[] args) { for (String arg: args) { System.out.println(arg); } } } 如果我使用可以由shell扩展的外卡提供参数,shell将展开它并将其提供给Java程序。 这并不奇怪。 所以,如果我在命令提示符下做 java WildCard test/* 该程序将打印 test/foo.txt test/bar.txt 其中foo.txt和bar.txt是目录“test”中的文件。 如果我用引号括起通配符参数,可以防止Shell扩展; * nix上的单引号,以及Windows上的双引号。 因此对于Windows,如果我在命令提示符下执行以下操作: java WildCard “test/*” 该程序现在将打印 test/* (没有扩张)。 但是,我发现Eclipse运行启动程序中的引用似乎没有效果,并且参数仍在扩展。 如果我放 “test/*” 在Eclipse运行启动程序的程序参数部分,并运行上面的类,我仍然得到 test/foo.txt test/bar.txt 换句话说,当程序实际运行时,双引号似乎丢失了。 这似乎只发生在Windows上。 有没有办法在Windows上使用Eclipse运行启动程序阻止glob扩展?

IntelliJ 9中的调试shell脚本

是否可以在IntelliJ IDEA 9.0.3中调试shell脚本。 我有一个调用java程序的shell脚本。 我想在这个java程序中设置一个断点并通过它进行调试。 我为IntelliJ提供了一个Bash插件,并在程序中设置断点,但它不会在断点处停止。 谢谢,汤姆

使用Hadoop Streaming时通过脚本运行Java应用程序:java.lang.NoClassDefFoundError

我使用Hadoop Streaming在tcsh中执行脚本文件: — First copy the jar files to the Hadoop filesystem, so that they are next to inputdir and outputdir. — cp App/* /hadoop/jardir/ — Run Hadoop — hadoop jar /usr/lib/hadoop/contrib/streaming/hadoop-streaming-0.20.2-cdh3u4.jar \\ -D mapred.task.timeout=120000000 \\ -input “/hadoop/inputdir/” -output “/hadoop/outputdir/” \\ -mapper script.sh -reducer script.sh -file script.sh \\ -jobconf mapred.map.tasks=1 -jobconf mapred.reduce.tasks=0 >>& log.txt 这个脚本文件像这样调用Java: […]

在Oozie中将参数从一个动作传递到另一个动作

我有一个以下shell脚本: DATE= date +”%d%b%y” -d “-1 days” 如何将DATE传递给Java操作?

从java程序运行shell脚本时权限被拒绝

我正在尝试使用java程序运行我的shell脚本。 我得到以下exception。 java.io.IOException: Cannot run program “/home/builder/code/target/classes/idFetcher.sh”: java.io.IOException: error=13, Permission denied at java.lang.ProcessBuilder.start(ProcessBuilder.java:460) at java.lang.Runtime.exec(Runtime.java:605) at java.lang.Runtime.exec(Runtime.java:443) at java.lang.Runtime.exec(Runtime.java:340) at script.InformationFetcher.main(InformationFetcher.java:26) 文件路径正确,文件存在于该位置。 这是我的代码 package script; import java.io.IOException; public class InformationFetcher { public InformationFetcher() { } public static void main(String[] args) { try { InformationFetcher informationFetcher = new InformationFetcher(); Runtime.getRuntime().exec(informationFetcher.getFilePath()); } catch (IOException e) { e.printStackTrace(); […]

Runtime.getRuntime()。exec()执行两行?

我需要在Runtime.getRuntime()。exec()中运行两行,这两行: cd %CMS_HOME% ant deploy 现在可以制作一个.bat文件,但我觉得它对于两行是没用的,更简单! 有人有什么想法吗?

如何在不激活shell的情况下打开shell?

我需要知道是否有任何方法可以打开shell而不是激活它,即使我单击其中的控件。 解释我需要的最好的方法是向你展示这个小例子。 我需要保持第一个shell处于活动状态,即使我单击第二个shell或它包含的任何窗口小部件。 public class TestMeOut { public static void main(final String[] args) { final Display display = new Display(); final Shell shell = new Shell(display); shell.setLayout(new GridLayout(1, false)); final Shell shell2 = new Shell(shell); shell2.setLayout(new GridLayout()); final Button btn = new Button(shell, SWT.PUSH); final Button btn2 = new Button(shell2, SWT.PUSH); btn.setText(“Test me”); btn2.setText(“I steal […]

无法使用Java ProcessBuilder启动带有参数的shell脚本

我正在尝试使用ProcessBuilder使用命令行参数执行shell脚本,此shell脚本调用另外两个使用此参数的shell脚本。 第一个shell脚本运行正常,但是当第二个脚本启动时它返回退出代码1。 Java程序的ProcessBuilder片段: //scenario – A string that holds a numerical value like 1 or 2 etc String[] command2 = {“/bin/bash”, “/runTemporaryTestSuite.sh”, scenario}; ProcessBuilder pb2 = new ProcessBuilder(command2); Process p2 = pb2.start(); BufferedReader br = new BufferedReader(new InputStreamReader(p2.getInputStream())); String line; //print – is an object ref of response.getWriter() // print.println(“Output of running “+Arrays.toString(command2)+” is: “); […]

是否可以将“tail -f”命令输出到java程序?

根据: unix / linux的Java IO实现“tail -f” Java“tail -f”包装器 我认为它可能但我有以下问题。 String TailCommand = “tail -f /path/PATH.txt| grep (…)”; Runtime r = Runtime.getRuntime(); Process p = r.exec(TailCommand); //handle buffer while (running) { // handle output } 进程p终止。 它与没有“top”或“tail -f”的常量更新的命令一起工作正常。 我想知道我是否错过了什么,有一些缓冲限制或其他什么? 我正在使用eclipse,但我想这应该不会对流程行为产生任何影响。 事实上,也许还有另一种简单的方法来解决我错过的问题。 我使用“tail -f”,因为我必须分析相当胖(一些GB)日志,这些日志不断附加并且不打算打开它并读取整个文件。 我只需要控制附加行。 但是我发现没有合适的尾部实现 提前致谢。

命令行解释器如何工作?

我一直认为操作系统上的进程有三个标准流: stdin, stdout, and stderr 。 我还认为像vim这样的文本编辑通过stdin并在stdout发送ANSI转义字符来工作。 但是,我对命令行解释器如何在这一案例中没有提到的观点如下: 当我运行命令C:\cygwin\bin\bash.exe ,系统会提示我: Microsoft Windows [Version 6.1.7600] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\Users\masson>C:\cygwin\bin\bash.exe bash-3.2$ …但是当我使用以下代码段在Java中运行它时,stdin流为空: ProcessBuilder pb = new ProcessBuilder(“C:\\cygwin\\bin\\bash.exe”); pb.redirectErrorStream(true); Process proc = pb.start(); final InputStream in = proc.getInputStream(); new Thread(new Runnable() { public void run() { // Blocks forever… in.read(new byte[1024]); } }).start(); […]