我想使用Java程序在linux终端中运行unset DISPLAY
作为命令。
我尝试使用Runtime.getRuntime().exec("unset DISPLAY");
,但它不起作用。
我能在这做什么?
答案 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\"");