【问题标题】:Getting "Error occurred during initialization of VM"获取“VM初始化期间发生错误”
【发布时间】:2018-11-12 19:23:44
【问题描述】:

我有一个由 Autosys 作业调度程序调用的旧版 shell 脚本。在脚本中,他们正在调用一个 jar 文件

res="`$JAVA_HOME/bin/java ....`"
echo >$res<

我收到以下错误。

Error occurred during initialization of VM 
    java.lang.Error: Properties init: Could not determine current working directory.

所以在shell脚本中我尝试打印当前目录如下所示

echo "PWD:" "$PWD"    # Nothing gets printed.
echo "USER:" "$USER"  # User id is getting printed

if [ -d "/export/home/abc/" ]; then
    echo "Directory present"    # gets printed
    echo `ls -ltr`              # total 3 gets printed
    echo `cd /export/abc/def`
    echo `pwd`                  # nothing gets printed
fi

所有类路径都在脚本本身中设置,并且类路径看起来不错。我不明白这里可能是什么问题。

另请注意,此脚本正在由 Autosys 作业调度程序调用的另一个脚本调用。

【问题讨论】:

  • echo cd /export/abc/def - 这不会改变你脚本的当前目录
  • @Mat: echo pwd 应该打印一些东西。但是没有打印任何东西。有什么原因吗?
  • 另外,如果我获取调用另一个脚本的脚本,它们会在同一个 shell 中执行,还是我还需要获取内部脚本?
  • @NJMR,如果您使用源代码并且嵌套源代码都将是相同的外壳。如果嵌套脚本作为 bash 脚本运行,那么它将是不同的 shell。此外,如果您使用阻塞命令获取 shell 脚本,那么 shell 脚本将被阻塞,并且只有在阻塞可执行文件完成后才会执行进一步的部分
  • @NJMR 不,它不会删除任何目录。 你确定吗?进程必须在某个目录中启动,并且不可能将当前工作目录更改为不存在的目录。让进程无法确定其当前工作目录的唯一方法是从进程下删除该目录。

标签: java linux shell unix solaris


【解决方案1】:

感谢安德鲁的提示。

正如帖子中所说,这是一个遗留脚本,每个脚本都有数千行,这使我们的分析变得困难。但最终发现我们得到错误的过程是由另一个用户启动的。该用户无权访问父文件夹,因此我们得到了

Could not determine current working directory.

我将父文件夹的权限授予该用户并且它有效。 谢谢大家...

【讨论】:

    【解决方案2】:

    这是一种预期的行为。

    脚本在子 shell 中运行,不能更改父 shell 工作目录。它的效果在它完成后就会消失。

    SO Reference for a workaround.

    【讨论】:

      猜你喜欢
      • 2015-09-16
      • 2017-03-31
      • 1970-01-01
      • 2011-09-24
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多