差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

下次修改
前次修改
java:installanywhere:variablproblemeoflinuxscript [2016/01/30 22:21]
tony 建立
java:installanywhere:variablproblemeoflinuxscript [2023/06/25 09:48] (目前版本)
行 2: 行 2:
 ====== 執行Linux Script的問題 ====== ====== 執行Linux Script的問題 ======
 ===== Problem ===== ===== Problem =====
 +本來以為升級已經完成,結果在Linux上,發現執行某些script的動作會無效。
 ===== How to? ===== ===== How to? =====
 +經過trace,發現script內如果有宣告與使用變數,都會不正常。後來發現2015比2008版本多了**Do not substitute unknown variables**的checkbox。\\ 
 +{{:​java:​installanywhere:​ia_substitude_unknown_variables.png|}}\\ 
 +看了一下官網資料,預設**Do not substitute unknown variables**是不打勾的。如果IA發現了沒宣告過的變數,就會取代為空白,而linux中的變數都是透過$開頭,所以會造成什麼結果呢?​ 舉例來說:​ 
 +<code bash> 
 +JAVA_PATH="​$INSTALLED_JVM_PATH$"​ 
 +echo $JAVA_PATH 
 +if [ -e $JAVA_PATH ] 
 +then 
 +        echo true 
 +else 
 +        echo false 
 +fi 
 +</​code>​ 
 +$INSTALLED_JVM_PATH$是我在IA宣告的變數,假設為/​opt/​jre/​bin/​java。在沒打勾的情況下,因為$JAVA_PATH不是IA宣告的變數,就會從$開始往後取代為空白:​ 
 +<code bash> 
 +JAVA_PATH="/​opt/​jre/​bin/​java"​ 
 +echo JAVA_PATH ] 
 +then 
 +        echo true 
 +else 
 +        echo false 
 +fi 
 +</​code>​ 
 +最後打勾就解決了。我這個案例是發生在linux script上,但是不代表在windows batch不會發生問題。只要你script內有$,就要記得打勾這選項。\\ 
 +\\ 
 +友藏內心獨白:​ 要來好好review了! 
 +\\ 
 +如果懶的review,就寫程式針對以下設定改為true試試吧,不過要注意不是每個變數都需要做這事情喔! 
 +<code xml> 
 +<​property name="​substituteUnknownVariable">​ 
 +  <​boolean>​false</​boolean>​ 
 +</​property>​ 
 +</​code>​
 ===== Reference ===== ===== Reference =====
   * [[http://​helpnet.flexerasoftware.com/​installanywhere2014/​Content/​helplibrary/​ia_prevent_varsubs.htm|Preventing the Substitution of Unknown Variables]]   * [[http://​helpnet.flexerasoftware.com/​installanywhere2014/​Content/​helplibrary/​ia_prevent_varsubs.htm|Preventing the Substitution of Unknown Variables]]