问答

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

作者:admin 2021-08-01 我要评论

我们经常会用如下代码在 Java 里调用系统命令: Process proc =Runtime.getRuntime().exec("sh xxx.sh"); 但是,今天为了在调试模式下运行脚本,加了 -x 参数,...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

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

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

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

参考资料:

[dmtsai@study ~]$ sh [-nvx] scripts.sh
选项与参数:
-n  :不要执行 script,仅查询语法的问题;
-v  :再执行 sccript 前,先将 scripts 的内容输出到屏幕上;
-x  :将使用到的 script 内容显示到屏幕上,这是很有用的参数!

范例一:测试 dir_perm.sh 有无语法的问题?
[dmtsai@study ~]$ sh -n dir_perm.sh 
# 若语法没有问题,则不会显示任何信息!

范例二:将 show_animal.sh 的执行过程全部列出来~
[dmtsai@study ~]$ 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....
###

隔壁的帖子也是楼主发的吧
四楼说的很清楚了,-x 的输出是到 stderr 的,用 process.getErrorStream() 拿到的流可以读到

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 请教 Java Runtime.exec("sh -x xx.sh

    请教 Java Runtime.exec("sh -x xx.sh

  • vue 动态引入某个文件夹下所有的文件

    vue 动态引入某个文件夹下所有的文件

  • 两个Observable,需要将用一什么把他包

    两个Observable,需要将用一什么把他包

  • root用户无法修改/var权限也无法mkdir

    root用户无法修改/var权限也无法mkdir

腾讯云代理商
海外云服务器