在命令行中运行 Shell 脚本

发布于 2024-12-23 04:20:34 字数 698 浏览 3 评论 0原文

我正在使用 cygwin 运行 Shell 脚本。

Process p;
InputStream in;
BufferedReader br;
String line;
String cmd;
cmd = "D:/cygwin/bin/bash -c '/bin/test/app.sh" +three_ltr_id+""+mon_code+""+year_code+""+part_no+""+version_no+" '";
System.out.println("EXECUTING: " + cmd);
p = Runtime.getRuntime().exec(cmd);
in = p.getInputStream();
p.waitFor();
 br = new BufferedReader(new InputStreamReader(in));
 System.out.println("OUT:");
 while ((line = br.readLine()) != null) {
 System.out.println(line);
 System.out.println("SCRIPT EXECUTED PROPERLY");

这显示了 EXECUTING 和我传递给脚本的命令。

如果我进入 D:/cygwin/bin/test 文件夹并运行相同的命令,它就会起作用。

当我在命令行运行相同的命令时,它将不起作用。

I am running a Shell script using cygwin.

Process p;
InputStream in;
BufferedReader br;
String line;
String cmd;
cmd = "D:/cygwin/bin/bash -c '/bin/test/app.sh" +three_ltr_id+""+mon_code+""+year_code+""+part_no+""+version_no+" '";
System.out.println("EXECUTING: " + cmd);
p = Runtime.getRuntime().exec(cmd);
in = p.getInputStream();
p.waitFor();
 br = new BufferedReader(new InputStreamReader(in));
 System.out.println("OUT:");
 while ((line = br.readLine()) != null) {
 System.out.println(line);
 System.out.println("SCRIPT EXECUTED PROPERLY");

This is showing EXECUTING and the commands that I passed to script.

If I go inside D:/cygwin/bin/test folder and run the same command it works.

When I run the same command at the command line it won't work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我最亲爱的 2024-12-30 04:20:34

您需要立即开始从 p.getInputStream() 读取输入,并继续读取直到没有更多输入。在Windows上,管道中的缓冲区很少或没有,一旦填满,进程就会挂起。

错误流也是如此。您可以启动线程来读取两个流,或者启动进程的方式中有一个选项可以组合常规输出和错误,并且您可以从那里读取它们。

You need to start reading the input from p.getInputStream() immediately, and keep reading it until there is no more. On Windows, there is little or no buffer in the pipe, and the process will hang once it is filled.

Same is true for the error stream. You could launch threads to read both streams, or there's an option in the way you launch processes to combine regular output and errors, and you can just read them from there.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文