LINUX.ORG.RU

Не работает bash

 ,


1

2

Доброго времени суток :) С bash я никогда не работал и как появилась задача написать не большой скрипт. Создал файл test.bash с содержимым:

#!/bin/bash
case "$1" in
	install)
		echo "Установка!"
	;;
	reinstall)
		echo "Переустановка!"
	;;
	*)
	echo "Используйте: install|reinstall"
esac
Запускаю командой bash ./test.bash install Получаю ошибку:
test.bash: line 2: syntax error near unexpected token `$'in\r''
'est.bash: line 2: `case "$1" in
Как это исправить?


Скопировал и запустил твой скрипт, у меня никаких проблем нет. Может у тебя там какие-то левые символы добавились?

alozovskoy ★★★★★
()
Ответ на: комментарий от BMW

А ты в чем пишешь? Посмотри в vim в режиме :set list. Ну и да, как выше сказали, давай посмотрим еще и file test.bash.

Кстати, «расширение» для скриптов - sh, а вообще его можно и не писать.

alozovskoy ★★★★★
()
Последнее исправление: alozovskoy (всего исправлений: 1)
Ответ на: комментарий от DeadEye
localhost:/> bash /tmp/test.sh install
Установка!
localhost:/> unix2dos /tmp/test.sh
unix2dos: converting file /tmp/test.sh to DOS format...
localhost:/> bash /tmp/test.sh install
/tmp/test.sh: line 2: syntax error near unexpected token `$'in\r''
'tmp/test.sh: line 2: `case "$1" in


ошибка вопроизводится при EOL \r\n
скорее всего под виндой писал, и скопировал его как файл.

исправить можно утилитой: dos2unix /tmp/test.sh

bl ★★★
()

А не надо было в блокноте писать. Сделай как в предыдущем комментарии написано.

leave ★★★★★
()
Ответ на: комментарий от dada

dos2unix ./test.bash

То есть, линуксоиды настолько суровы, что для s/\r//g у них есть отдельная *программа*?

anonymous
()
Ответ на: комментарий от BMW

Как избегать эту ошибку?

завести под оффтоп`ом редактор который умеет UTF8 и правильные переводы строк.

MKuznetsov ★★★★★
()
Ответ на: комментарий от BMW

Да, я писал из под windows код. Как избегать эту ошибку?

Очевидно же, снести оффтопик

kiotoze ★★★★
()
Ответ на: комментарий от vzzo

А что, где нибудь встречается перевод каретки отдельно от перевода строки? Зачем? И зачем флаг g? предполагается, что в одной строке 2 перевода, или что?

newtimebigtime
()
Ответ на: комментарий от vzzo

Кстати, попробовал сейчас, bash вообще \r не переваривает, независимо от \n. Так что, похоже, Ваш вариант не верен.

newtimebigtime
()
Ответ на: комментарий от BMW

Да, я писал из под windows код. Как избегать эту ошибку?

Notepad++

h578b1bde ★☆
()
Ответ на: комментарий от BMW

Да, я писал из под windows код. Как избегать эту ошибку?

Не использовать уиндовс

quest ★★★★
()
Ответ на: комментарий от anonymous

То есть, линуксоиды настолько суровы, что для s/\r//g у них есть отдельная *программа*?

Я чего-то не знаю о регекспах и они умеют кодировать UTF16 в UTF8?

$ enca test.txt 
Universal character set 2 bytes; UCS-2; BMP
  CRLF line terminators
  Byte order reversed in pairs (1,2 -> 2,1)

$ dos2unix test.txt 
dos2unix: converting file test.txt to Unix format ...

$ enca test.txt 
Universal transformation format 8 bits; UTF-8
redgremlin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.