2014-09-24 51 views
0

我想檢測一個bash腳本中的os類型並相應地設置JAVA_HOME。檢測os類型並設置JAVA_HOME

if [[ $(type -t apt-get) == "file" ]]; then os="apt" 
    elif [[ $(type -t yum)  == "file" ]]; then os="yum" 
    else 
      echo "Could not determine os." 
    fi 

case "$os" in 

     apt) pushd /etc/ \ 
       echo 'export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/' >> /etc/profile ;; 

     yum) pushd /etc/profile.d/ \ 
       echo 'export JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk.x86_64/' >> /etc/profile.d/user_env.sh ;; 
esac 

我已經試過這個,但它似乎不是寫入導出到文件。

任何幫助,非常感謝。

+0

什麼是'$ os'實際上設置爲? – 2014-09-24 17:10:22

+0

我已添加編輯 – jquery 2014-09-24 17:16:10

+0

只是一個nit:您正在檢查程序包管理器類型,而不是操作系統類型。 – chepner 2014-09-24 17:36:21

回答

2

我不知道該pushd起到什麼樣的目的在這裏,但你不希望\,因爲這將是pushd命令行的延續,而不是實際運行echo命令。你想,我想:

if [[ $(type -t apt-get) == "file" ]]; then os="apt" 
elif [[ $(type -t yum)  == "file" ]]; then os="yum" 
else 
    echo "Could not determine os." 
fi 

case "$os" in 
     apt) echo 'export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/' >> /etc/profile ;; 
     yum) echo 'export JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk.x86_64/' >> /etc/profile.d/user_env.sh ;; 
esac 

如果你想保持pushd,這將是:

case "$os" in 

     apt) pushd /etc/ 
       echo 'export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/' >> /etc/profile ;; 

     yum) pushd /etc/profile.d/ 
       echo 'export JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk.x86_64/' >> /etc/profile.d/user_env.sh ;; 
esac 
+0

謝謝你,你是對的,pushd沒有達到目的。 – jquery 2014-09-24 17:37:24