linux – xterm没有找到shell的绝对路径

weixin_38081402 2019-09-12 11:34:30
我正在尝试使用ProcessBuilder从Java在SUSE Linux Enterprise 12中运行脚本.代码如下: ProcessBuilder pb = new ProcessBuilder("xterm", "-e", "script_path"); Process pr = pb.start(); 然后我读取了来自Process的消息,它是在说xterm:找不到shell的绝对路径:script_path 所以我尝试从SUSE中的Gnome-Terminal,并使用命令xterm script_path但发现了相同的错误消息.我尝试了表单root和本地用户.我完全没有关于这个错误的线索. 主要条件是我必须能够以root身份运行此代码,因为我的java代码必须仅以root身份调用. 更新: 我再次尝试过,现在我实际上有一个来自ProcessBuilder的新错误消息.我从错误流中得到的消息如下: error extracting:: error message: Warning: This program is an suid-root program or is being run by the root user. The full text of the error or warning message cannot be safely formatted in this environment. You may get a more escriptive message by running the program as a non-root user or by removing the suid bit on the executable. xterm: Xt error: Can't open display: %s xterm: DISPLAY is not set 我试图执行的脚本是unZipper.sh: #!/bin/bash sudo unzip -o postgresql-9.4.6-linux-64.zip -d some_path/db/ sleep 3
...全文
304 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38097244 2019-09-12
  • 打赏
  • 举报
回复
xterm对执行命令所涉及的路径名进行了一些(不同的)检查.这是一个中间人: >如果你说“xterm -e command”,xterm将依赖你现有的$SHELL设置和/或luit的配置(它也以不同的方式使用$SHELL)来决定命令是否成功.>如果你说“xterm命令”(没有-e选项),xterm会将其视为特殊情况,要求它是绝对路径名.这是通常出现问题的地方. 在从patch #301开始的更改中(除了特殊的无-e情况)xterm检查现有的$SHELL以确保它在/ etc / shells中列出. (这里有一个很长的故事,但总结一下,它注意到它在安全方面有所改善……).如果您阅读更改日志,您可以看到正确的尝试需要几次尝试来处理特殊情况. 从给出的信息: >由于你在一个案例中使用-e(来自ProcessBuilder)而不是在另一个案例中,因此可能存在一些问题.>或者你的$SHELL可能没有在/ etc / shells中列出.>最后,可能会有一些资源设置(结合不正确的区域设置变量)导致程序意外执行luit.例如,如果xterm尝试使用luit但是localeFilter资源设置为相对路径,则会产生此错误.

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧