我想使用 Java 程序在 linux 终端中将 unset DISPLAY
作为命令运行。
我尝试使用 Runtime.getRuntime().exec("unset DISPLAY");
,但它不起作用。
我可以在这里做什么?
最佳答案
这行不通,原因如下。环境变量是从父进程继承的。 child 无法控制 parent 的环境。以下是您的设置中发生的情况:
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)来复制这个功能。
关于java - 使用 java 程序在 linux 终端中运行命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6420265/