差異處
這裏顯示兩個版本的差異處。
java:installanywhere:variablproblemeoflinuxscript [2016/02/01 08:49] tony [How to?] |
java:installanywhere:variablproblemeoflinuxscript [2023/06/25 09:48] |
||
---|---|---|---|
行 1: | 行 1: | ||
- | {{tag>InstallAnywhere java}} | ||
- | ====== 執行Linux Script的問題 ====== | ||
- | ===== Problem ===== | ||
- | 本來以為升級已經完成,結果在Linux上,發現執行某些script的動作會無效。 | ||
- | ===== 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 ===== | ||
- | * [[http://helpnet.flexerasoftware.com/installanywhere2014/Content/helplibrary/ia_prevent_varsubs.htm|Preventing the Substitution of Unknown Variables]] | ||
- | ===== ===== | ||
- | ---- | ||
- | \\ | ||
- | ~~DISQUS~~ |