Что не так с моим сценарием оболочки в SunOS, отлично работает на других вариантах Linux
Вопрос
Пожалуйста, кто-нибудь может определить, в чем проблема в моем сценарии оболочки, он отлично работает в других системах Linux, кроме Sunos, ниже мой результат
родовое слово Примечание . Я использую csh
< sizesUpdate
Я повсюду изменил общий кодовый код
но все равно получаю
родовое словоРешение
Вероятно, не задан код $JAVA_HOME
.Неустановленная переменная обычно заменяется пустой строкой, поэтому это:
эквивалентно этому:
родовое слово, что является синтаксической ошибкой.([
- это еще одно название команды test
; обычно это символическая ссылка.)
Попробуйте указать имя переменной в кавычках:
родовое слово И если в ответ на запрос вы задали код $JAVA_HOME
, вы, вероятно, захотите сгенерировать его.(На самом деле я в этом не уверен; зависит ли export
от установленного java
?)
ИЗМЕНИТЬ :
Окей, похоже, был установлен общий кодовый тег.
Для команды $JAVA_HOME
(или $JAVA_HOME
) оператор равенства строк - это test
, а не [
.
Попробуйте:
родовое словоРЕДАКТИРОВАТЬ2 :
Это:
родовое слово, наверное, лучше (см. ответ @ n.m).
Другие советы
Портативный способ проверки пустых строк -
родовое словоили
родовое слово Также можно использовать общий кодовый код.Эта форма полезна для сравнения произвольной строки, которая может быть пустой, напримерif [ "x$VAR" == "x" ]
.
Эта форма if [ "x$JAVA_HOME" == "x$SCALA_HOME" ]
может не работать с некоторыми старыми версиями оболочки, хотя современная SunOS должна быть в порядке.
== не является оператором в sh. Одиночный знак= - это оператор проверки, совместимый с posix.
родовое словоУ меня только что возникла эта проблема с Solaris 10, и я обнаружил отличный фрагмент информации в этом посте десятилетней давности: http://lists.infowares.com/archive/clug/2003-Feb February /001849.html
<цитата>Я только что попробовал if ["a"=="a"]; тогда эхо да; фи 'в борне приглашение оболочки на нескольких разных платформах. Солярис сказал тест: unknown operator== 'AIX сказал' sh:==: unknown test operator 'HP-UX сказал 'sh:==: Параметр тестовой команды недействителен.' IRIX сказал "да" (просто чтобы отличаться :))
Во-вторых, возможно, что sh не знает, что делать с вашей пустой строкой. Старый добрый прием - изменить ваш тест на
родовое словокоторый для меня сравнивает [XX / opt / jdk1.7.0_02= XX], который является ложным, вместо того, чтобы проводить тест с пустой правой стороной, которая не работает в некоторых оболочках.