“:Команда не найдена”
Вопрос
Некоторая проблема возникает при поиске одного из ваших env-файлов (ряд экспортируемых переменных)
например:
...
export MY_ROOT=/Soft/dev/blah/blah
export MY_BIN=${MY_ROOT}/bin
...
приводит к
$. my_env.sh
$echo $MY_BIN
/bint/dev/blah/blah
=> "/bin", похоже, перезаписывает начало переменной вместо того, чтобы добавлять к ней суффикс..
Есть какие-нибудь идеи?
Кстати, каждый раз, когда мы отправляем этот файл, выдается сообщение об ошибке:
": Command not found"
Что странно..Это сообщение появляется, даже если мы комментируем все его содержание.
Вызванная оболочка в начале кажется хорошей #!/bin/sh
, или #!/bin/bash
.
А как насчет управляющих символов?Как их экранировать в Linux?
Решение
Это исправит окончания строк в файле:
dos2unix my_env.sh
Нет необходимости в shebang в файле, который будет только исходным, поскольку он в любом случае выполняется в текущей оболочке.Однако в качестве комментария это может быть информативно для читателей-людей.
Другие советы
":Команда не найдена" - это ошибка, которую я видел, когда сценарий оболочки UNIX / Linux был (неправильно) обработан системой MS Windows.Например, если он был извлечен с помощью WebCVS, изменен с помощью Notepad или WordPad, а затем повторно отправлен.
(Он жалуется, что не может найти исполняемый файл [Ctrl-M] --- который является вполне допустимым, хотя и крайне неудобным и несколько подозрительным именем файла для UNIX / Linux).
Запустите файл через GNU cat -A
или тот od -x
или hexdump
команды , чтобы увидеть это (и подтвердить мой диагноз ...или прогнать его через tr -d
с соответствующим цитированием и обработкой оболочки "дословно" для вашей системы.(Например tr -d '[Ctrl-V],[Ctrl-M]'
под Bash в типичной системе Linux).
В зависимости от вашей версии tr
возможно, вы смогли бы использовать: tr -d '\r'
или tr -d \015
(015 - восьмеричное число для CR, "возврата каретки" или ^M - MS-DOS привыкла использовать пары CR / LF в качестве завершения строки, что является лишь одной из многих причин, по которым MS-DOS может сгнить в бездне забвения, когда дело доходит до совместимости.Терминаторы строк из отдельных символов не вызывают никаких реальных проблем ни у кого другого ...но ПАРЫ вызывают реальные проблемы с преобразованием, когда все остальное в истории основных вычислений использовало для этого одиночные символы).
О, да, vim
имеет удобный set ff
(он же. set fileformat
опция, которая может обрабатывать соглашения о завершении строки в UNIX, macOS и MS-DOS из любой копии vim
независимо от того, на какой платформе вы находитесь.Кажется, я припоминаю vim
по умолчанию используется определение того, какие типы завершения строки использует файл, и оставление его неизменным (и, конечно, по умолчанию используется родной язык вашей платформы для любых новых файлов).