差異處
這裏顯示兩個版本的差異處。
下次修改 | 前次修改 | ||
java:installanywhere:variablproblemeoflinuxscript [2016/01/30 22:21] tony 建立 |
java:installanywhere:variablproblemeoflinuxscript [2016/02/01 16:37] tony [How to?] |
||
---|---|---|---|
行 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]] |