Вопрос

Некоторая проблема возникает при поиске одного из ваших 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 по умолчанию используется определение того, какие типы завершения строки использует файл, и оставление его неизменным (и, конечно, по умолчанию используется родной язык вашей платформы для любых новых файлов).

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