Что не так с моим сценарием оболочки в SunOS, отлично работает на других вариантах Linux

StackOverflow https://stackoverflow.com/questions/7832277

  •  27-10-2019
  •  | 
  •  

Вопрос

Пожалуйста, кто-нибудь может определить, в чем проблема в моем сценарии оболочки, он отлично работает в других системах 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], который является ложным, вместо того, чтобы проводить тест с пустой правой стороной, которая не работает в некоторых оболочках.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top