从Java运行Unix命令非常简单.
Runtime.getRuntime().exec(myCommand);
Run Code Online (Sandbox Code Playgroud)
但是可以从Java代码运行Unix shell脚本吗?如果是,从Java代码中运行shell脚本是一个好习惯吗?
在Unix上,有没有办法让一个进程可以改变另一个进程的环境变量(假设它们都是由同一个用户运行)?一般的解决方案是最好的,但如果没有,那么一个人是另一个人的孩子的具体情况怎么样?
编辑:通过gdb怎么样?
我可以轻松地使用读取环境变量System.Environment.getEnv
.但是,System.Environment
没有任何相应的setEnv
功能(据我所知).
如何从Haskell程序设置环境变量?我更喜欢跨平台的解决方案.(所以只是执行export VAR=val
或使用System.Posix.Env
并不是我正在寻找的.)
我可以通过RunTime
类运行Linux命令.有没有办法以编程方式从Java设置Linux全局环境?
我想通过Java模拟以下Linux命令语句
root@machine:/tmp# export TEST=v2
Run Code Online (Sandbox Code Playgroud)
我已经使用了ProcessBuilder,但是TEST变量没有改变.
ProcessBuilder pb = new ProcessBuilder("/bin/bash","-c","export TEST=v3" + "&& exec");
Run Code Online (Sandbox Code Playgroud)
更新:实际上我的最终目标是使用EMAIL_NAME环境作为电子邮件地址,当我的应用程序和计算机都启动并停止时,这些操作将发送给EMAIL_NAME.在这种情况下,我理解不可能在纯Java代码上设置linux全局环境.所以我有一个解决方案是EMAIL_NAME将保存在一个文件中,它将被linux脚本或java代码更新或读取.
我正在用 Junit 测试一个委托类。当我右键单击“运行配置”并将键值对放在“环境”选项卡中时,它工作正常。
我尝试从静态块以及 @Before 方法设置它失败。你能帮我吗?
public MyClass{
public void myMethod(){
String tmp = configProps.getProperty("auto_commit_location");
String commitScriptLocation = System.getenv(tmp);
System.out.println(commitScriptLocation); --- This returns null
}
}
Junit Test:
public class AutoCommitControlDelegateTest {
static {
System.setProperty("auto_commit_location", "/tmp/");
}
@Autowired
private *******
//calls to my methods
Run Code Online (Sandbox Code Playgroud)