跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教 Java Runtime.exec(“sh -x xx.sh”)无效的问题
未分類
30 5 月 2020

请教 Java Runtime.exec(“sh -x xx.sh”)无效的问题

请教 Java Runtime.exec(“sh -x xx.sh”)无效的问题

資深大佬 : duanguyuan 0

我们经常会用如下代码在 Java 里调用系统命令:

Process proc =Runtime.getRuntime().exec("sh xxx.sh"); 

但是,今天为了在调试模式下运行脚本,加了 -x 参数,发现没有效果,得到的脚本的输出流与没有 -x 参数一样。直接在shell里执行sh -x xxx.sh,是能出现调试效果的。 但在 jvm 里面,就无效了。另外测试了-n和-v参数,-n有效,-v无效。 请问这是什么原因呢?

参考资料:

[[email protected] ~]$ sh [-nvx] scripts.sh 选项与参数: -n  :不要执行 script,仅查询语法的问题; -v  :再执行 sccript 前,先将 scripts 的内容输出到屏幕上; -x  :将使用到的 script 内容显示到屏幕上,这是很有用的参数!  范例一:测试 dir_perm.sh 有无语法的问题? [[email protected] ~]$ sh -n dir_perm.sh  # 若语法没有问题,则不会显示任何信息!  范例二:将 show_animal.sh 的执行过程全部列出来~ [[email protected] ~]$ sh -x show_animal.sh  + PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/root/bin + export PATH + for animal in dog cat elephant + echo 'There are dogs.... ' There are dogs.... + for animal in dog cat elephant + echo 'There are cats.... ' There are cats.... + for animal in dog cat elephant + echo 'There are elephants.... ' There are elephants.... 

大佬有話說 (9)

  • 資深大佬 : Hieast

    没写过 Java,单就问题来看建议查一下文档看 Runtime.getRuntime().exec 这种方式运行时标准输出跟当前进程是否一致。可以尝试 Process proc =Runtime.getRuntime().exec(“sh -x xxx.sh > x.log”); 把标准输出重定向到文件,看文件里有没有输入。

  • 資深大佬 : oneisall8955

    用数组来装命令和参数试试?

  • 資深大佬 : binux

    sh 不是同一个 sh

  • 資深大佬 : momocraft

    sh -x 的调试信息的输出是 stderr

  • 資深大佬 : fmumu

    把 process 的错误输出拿出来看看,exec 有几个重载方法都看看

  • 資深大佬 : whoami9894

    “`
    [email protected]:/tmp# cat 1.sh
    echo 123
    [email protected]:/tmp# sh 1.sh
    123
    [email protected]:/tmp# sh -x 1.sh
    + echo 123
    123
    [email protected]:/tmp# sh -x 1.sh > 1
    + echo 123
    [email protected]:/tmp# cat 1
    123
    [email protected]:/tmp# sh -x 1.sh > 1 2>&1
    [email protected]:/tmp# cat 1
    + echo 123
    123
    “`

  • 資深大佬 : Infernalzero

    用 ProcessBuilder,把 sh 和 xxx.sh 作为两个参数传入即可
    或者还是 RunTime 的话改成”/bin/bash”, “-c”, “xxx.sh”

  • 資深大佬 : huaouo

    ProcessBuilder redirectOutput(ProcessBuilder.Redirect.INHERIT)
    redirectError(ProcessBuilder.Redirect.INHERIT)
    试试?

  • 主 資深大佬 : duanguyuan

    问题解决啦!谢谢大家。
    我在 github 上找到一段比较完整的代码:
    https://github.com/chenerzhu/quartz-console/blob/master/src/main/java/com/chenerzhu/quartz/executor/impl/ShellExecutor.java

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具