【问题标题】:Include the java -version command in bash script在 bash 脚本中包含 java -version 命令
【发布时间】:2014-03-07 00:26:58
【问题描述】:

[按照您的要求更新消息以包含脚本及其输出]。

我创建了一个在 Ubuntu 上安装 Oracle Java 的 linux 脚本。

脚本如下:

#!/bin/bash
# This script installs Oracle Java 7u51 jdk on Ubuntu Linux 64 bit

echo "Starting Oracle Java JDK Installation..."
sudo mkdir /usr/local/java
cd
sudo cp -r jdk-7u51-linux-x64.tar.gz /usr/local/java
rm jdk-7u51-linux-x64.tar.gz
cd /usr/local/java

echo "Unpacking java files in /usr/local/java"
sudo tar xvzf jdk-7u51-linux-x64.tar.gz
sudo rm jdk-7u51-linux-x64.tar.gz
sleep 1s

echo "Updating system Path file /etc/profile with Java variables"
sudo sed -i '$ a\JAVA_HOME=/usr/local/java/jdk1.7.0_51' /etc/profile
sudo sed -i '$ a\PATH=$PATH:$HOME/bin:$JAVA_HOME/bin' /etc/profile
sudo sed -i '$ a\export JAVA_HOME' /etc/profile
sudo sed -i '$ a\export PATH' /etc/profile
sleep 1s

echo "Updating alternatives"
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/
jdk1.7.0_51/bin/java" 1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/
jdk1.7.0_51/bin/javac" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/
jdk1.7.0_51/bin/javaws" 1
sudo update-alternatives --set java /usr/local/java/jdk1.7.0_51/bin/java
sudo update-alternatives --set javac /usr/local/java/jdk1.7.0_51/bin/javac
sudo update-alternatives --set javaws /usr/local/java/jdk1.7.0_51/bin/javaws
sleep 3s

echo "Reload system wide Path /etc/profile"
. /etc/profile
sleep 3s

echo "Testing if Java is installed correctly. System must reply with Java version."
java –version
sleep 1s
javac -version

脚本运行良好,Java 安装正确。 但是最后的 java -version 命令在终端给出了这个输出。

测试 Java 是否安装正确。系统必须回复 Java 版本。

错误:无法找到或加载主类-版本

javac 1.7.0_51

有两件事让我感到困惑。 首先是 javac -version 命令在脚本中有效,而 java -version 命令无效。

第二个是如果我在脚本结束后立即进入终端并输入自己的java -version,它可以工作。

【问题讨论】:

  • “它不起作用”,你的意思是你得到一个异常还是它没有输出任何东西?此外,如果您创建一个仅调用java -version 的测试 bash 脚本,这行得通吗?添加这两个数据点可能会帮助您更好地获得反馈。
  • PS:概念证明是它应该在 bash 脚本中工作。我刚刚创建了一个由#!/bin/bashjava -version 组成的两行脚本,并且运行良好。
  • @concept303 是的,我相信 DreadPirateShawn 所说的是正确的方法 - 尝试看看这是否适用于最简单的设置。如果没有,请在此处粘贴您正在使用的代码,以及在脚本之外(即直接在您的终端中)正常运行的命令示例。
  • 我认为粘贴您的脚本代码将有助于其他人找到原因。
  • @DreadPirateShawn:试过了,结果还是一样。不能从脚本工作,可以从终端工作,我手动输入命令。重启后这种情况仍然存在。

标签: java linux shell


【解决方案1】:

安装可能会添加到 PATH,您不会从当前 shell 中看到它。试试吧

sh -c java -version

【讨论】:

  • 照你说的做,不行。我正在更新主要消息以包含脚本,所以如果您有任何其他想法,请查看那里。谢谢
  • 以上没有证据表明你按照我说的做了。
  • 我知道但我试过了。
【解决方案2】:

也许,你可以改变调用顺序,你可以在 update-alternatives 操作之前调用 reload 系统范围的 Path 操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2021-03-23
    • 1970-01-01
    相关资源
    最近更新 更多