HOME环境变量未在bash脚本中设置

时间:2014-10-16 01:19:00

标签: java linux bash shell

我有一个Java程序,它产生一个调用另一个脚本的bash脚本。在第二个脚本中,我发现$HOME变量未设置。这是它的要点:

在Java中:

Process p = new ProcessBuilder("bash", "-l", "/foo/a.sh").start();
// code to actually execute p

/foo/a.sh:

#!/bin/bash
/foo/b.sh

/foo/b.sh:

#!/bin/bash
echo "HOME=$HOME"

这回应“HOME =”。最终的问题是$HOME/bin应该被添加到〜/ .profile中的PATH中,但由于没有发生,因此无法访问一堆自定义可执行文件。

我通过以下方式解决了这个问题:

if [ -d ~/bin ] ; then
    PATH=~/bin:"$PATH"
fi

这很好用。但我想我只想了解为什么没有设置$ HOME。似乎$HOME~应该大致相同,不是吗?对于如何设置这个环境,我可能从根本上缺少一些东西。

我正在运行Ubuntu 12.04.5,如果这有所不同。

1 个答案:

答案 0 :(得分:4)

证据表明,运行Java应用程序的环境中缺少HOME。假设应用程序未明确取消设置HOME,最可能的原因是应用程序是从某个上下文启动的,而不是应用程序正在运行的用户的登录。

~$HOME相似是正确的。如果环境中存在HOME,即使将其设置为空字符串,~也会替换为$HOME。但是,如果环境中不存在HOMEbash将尝试查找当前登录用户的主目录,并将其用于~

例如

$ bash -c 'echo ~'
/home/rici
$ HOME='Hello, world!' bash -c 'echo ~'
Hello, world!
$ HOME= bash -c 'echo ~'

$ (unset HOME; bash -c 'echo ~';)
/home/rici

由于您的解决方法需要等同于上一个方案,因此我得出结论:HOME尚未设置,或者未设置。