Сценарий оболочки Bash/Korn, отредактированный в Windows, бросает ошибку' … ^M: не найденный'

Необходимо смочь сделать это путем установки PS1 запросите переменную в Вашем ~/.bashrc файл как это:

PS1='[\u@\h \w]\$ '

Для создания это окрасило (и возможно полужирный - это зависит от того, включил ли эмулятор терминала его), необходимо добавить цветовые коды Escape:

PS1='\[\e[1;91m\][\u@\h \w]\$\[\e[0m\] '

Здесь, все не оставляемое между 1;91m и 0m части будут раскрашены 1;91 цвет (полужирный красный). Поместите эти управляющие коды вокруг различных частей подсказки, чтобы использовать различные цвета, но не забыть сбрасывать цвета с 0m или иначе Вы окрасите терминальный вывод также. Не забудьте получать файл впоследствии для обновления текущей оболочки: source ~/.bashrc

8
14.04.2019, 12:24
2 ответа

После отслеживания вокруг различных форумов и некоторое сообщение Переполнения стека я нашел проблему.

Вот объяснение, чтобы лучше понять и 'видеть' первопричину ошибок.

Прежде всего, если Вы - написание кода в Windows, лучшая рука сами с Блокнотом ++. Это - в основном швейцарский нож текстовых редакторов, по-моему.

Теперь, чтобы взглянуть на EOL (конец строки) символы и другие символы управления делают следующее:

1. Откройте файл в Блокноте ++.

Выберите Представление> Выставочный Символ> Шоу Все Символы от Строки меню

Необходимо теперь видеть символы следующим образом: Screenshot of Notepad++:Editing a UNIX script on Windows

Ага! Windows/MS-DOS использует CR+LF для указания на конец строк. Теперь UNIX использует символ LF для указания на линейное окончание (символ EOL).

2.1. Давайте преобразуем Windows EOL в UNIX EOLs:

Выберите РЕДАКТИРОВАНИЕ> Преобразование EOL> Формат UNIX

Необходимо видеть что-то вроде этого:

Screenshot of Notepad++: EOL Conversion to UNIX Format Это объясняет, почему мы видели, что '\r' символ был добавлен в конце строки. Это вызвано тем, что UNIX распознал '\n' или LF (перевод строки) как линейное окончание / символ EOL, но проигнорируйте '\r' или ^M (возврат каретки) символ.

Мы можем также протестировать на выпуск EOL

bash-3.00$ head myScript.sh | cat -vet | head -1
#usr/bin/bash^M$
bash-3.00$ #We see that ^M, that is \r is found at the end of each line. 

2.2. Если Вы хотели бы, преобразовывают файл от Windows до UNIX формат EOL на UNIX затем существует два способа зафиксировать это:

$ dos2unix myScript.sh

или

Используйте решение, предоставленное @Chris Вниз как указано ниже:

$ sed -i 's/\r$//' myScript.sh

Ссылки:

  1. Для получения дополнительной информации о линейном окончании и what-is-the-difference-between-r-and-n отсылают эти ссылки.
15
27.01.2020, 20:09
  • 1
    Превосходный ответ! Я думаю для мелочей, придерживающихся с pico, редактор командной строки, будет решение. –  João Pimentel Ferreira 23.04.2016, 23:09

Ваш сценарий содержит окончания строки CRLF, тогда как Unix использует окончания строки LF. Следующее удалит их, если у Вас будет GNU sed:

sed -i 's/\r$//' cxStopAllServicesOnSERVER.sh

Если у Вас нет GNU sed, запишите во временный файл и затем переместите его поверх старого файла.

Как в стороне, если Вы вызываете использование сценария sh, Вы переопределите хижину. Это, вероятно, не, что Вы хотите.

4
27.01.2020, 20:09
  • 1
    dos2unix инструмент также стоит предложить. –  jordanm 18.11.2012, 09:14
  • 2
    @jordanm Да. Я покрыл его в своем сообщении ниже. –  Kent Pawar 18.11.2012, 12:18
  • 3
    ответа, нет никакой определенной хижины. !/ должен быть вставлен в первую строку, чтобы иметь ту. –  miracle173 18.11.2012, 13:51
  • 4
    @miracle173 я принял это, был опечаткой вместо того, чтобы быть намеренным. –  Chris Down 18.11.2012, 16:34

Теги

Похожие вопросы