使用java程序在linux终端运行命令?

时间:2011-06-21 04:12:43

标签: java linux

我想使用Java程序在linux终端中运行unset DISPLAY作为命令。

我尝试使用Runtime.getRuntime().exec("unset DISPLAY");,但它不起作用。

我能在这做什么?

2 个答案:

答案 0 :(得分:6)

这不起作用,这就是原因。环境变量从父进程继承。孩子无法控制父母的环境。以下是您的设置中发生的情况:

 bash   ->   java   ->   unset
   |           |           |
 parent      child     grand-child
   |           |           |
unaffected unaffected   affected

所以实际上你的命令正在工作,但它没有你想要它的效果。遗憾的是,java无法改变父母的环境。

您的java程序可以修改自己的环境变量,java生成的任何子代都将继承这些变量。所以你可能会让java为你启动一个bash shell,然后以交互方式使用那个bash shell,但这似乎是很多开销。

有关如何设置java的环境变量,请参阅此文章:
How do I set environment variables from Java?

如果您愿意回避整个java问题,那么大多数人在这种情况下所做的就是获取特殊文件。例如,创建一个名为“no-x.sh”的文件,如下所示:

# Unset the display variable
unset DISPLAY

然后从您当前的(交互式)shell中获取这样的文件:

$> source no-x.sh

现在您的主bash shell已更改其环境。请注意,这是一个HACK(或者对于你们所有的bash狂热者 - 一个功能),你永远不应该期望用其他任何东西(比如java)复制这个功能。

答案 1 :(得分:3)

你需要使用像这样的bash可执行文件来运行它:

 Runtime.getRuntime().exec("/bin/bash -c \"unset DISPLAY\"");