bash: синтаксическая ошибка рядом с неожиданной проблемой форматирования токена «else»?

Я новичок в bash, и у меня проблемы с форматированием. Я пытаюсь отредактировать /etc/profile, чтобы он отображал сообщение о входе в систему для пользователя root и другое сообщение для входа в систему для всех остальных. Но я получаю сообщение об ошибке bash: синтаксическая ошибка рядом с неожиданным токеном else. Я пробовал все разные комбинации без точки с запятой, затем на следующей строке и т. Д., Но всегда получаю одну и ту же ошибку. Я пробовал строки по отдельности, и они отображаются нормально (кроме $HOSTNAME, не могу заставить это работать). При таком запуске и входе в систему с правами root он просто перейдет к «Добро пожаловать $USER ...».

Любые предложения будут оценены!

if [ "$UID" -ne 0 ]; then
  echo -e "\033[40;37;7m Danger! Root is doing stuff in `pwd`\033[0m"
else
  echo "Welcome $USER! You are working on `$HOSTNAME` in `pwd`."
fi

person user2963286    schedule 07.11.2013    source источник
comment
У меня работает с bash 3.2   -  person Himanshu    schedule 07.11.2013
comment
Выглядит хорошо для меня - и работает, несмотря на две вещи. Во-первых, вы, скорее всего, хотели проверить [ "$UID" -eq 0 ] вместо -ne - в противном случае это повторяет корневую вещь для пользователей без полномочий root и наоборот. И второе: $HOSTNAME нельзя заключать в обратные кавычки, это не команда.   -  person Johannes H.    schedule 07.11.2013
comment
@JohannesH.: Если только ваше имя хоста не совпадает с какой-либо командой (скажем, если вы назвали свою машину cat).   -  person Keith Thompson    schedule 07.11.2013
comment
@Keith: Хотя это и возможно, маловероятно, что это то, что намеревался сделать ОП: D   -  person Johannes H.    schedule 07.11.2013
comment
@JohannesH.: Согласен - но существует значительный риск того, что эта строка кода неожиданно выполнит какую-то, казалось бы, случайную команду.   -  person Keith Thompson    schedule 07.11.2013
comment
@ЙоханнесХ. О, круто, просто смена -ne на -eq исправила это. Спасибо: Д. Также $HOSTNAME находится в обратных кавычках, как и pwd, но это не работает, хотя pwd работает.   -  person user2963286    schedule 07.11.2013
comment
Потому что $HOSTNAME — это расширение переменной (например, $USER, которое не находится в обратных кавычках, но работает ^^), а pwd — это команда ac, которая выполняется в подоболочке (что делается путем окружения ее обратными кавычками).   -  person Johannes H.    schedule 07.11.2013
comment
Ах да, я неправильно прочитал, извините :P. Хорошо, да, теперь все работает :) Большое вам спасибо, JohannesH.!   -  person user2963286    schedule 07.11.2013
comment
Используйте 1_. /etc/profile предназначен для работы в любой POSIX-совместимой оболочке, а параметр -e для echo является расширением bash.   -  person chepner    schedule 07.11.2013


Ответы (1)


Как написано выше, у меня работает, но, как указано, вы должны изменить свой тест на -eq 0.

Что касается синтаксической ошибки рядом с неожиданным токеном, я предполагаю, что ваш файл содержит встроенные «управляющие коды», то есть, скорее всего, возврат каретки \r.

Пытаться:

cat -e ~/your_profile

увидеть какие-либо непечатаемые символы? если это так, удалите их (параметры cat могут отличаться - проверьте свою справочную страницу) или

od -c ~/your_profile
person Dale_Reagan    schedule 01.10.2015