Это в порядке для использования для петляния вместо источника - в .bashrc в Ubuntu и OS X?

# echo "This is message body" | mail -s "This is subject" you@domain.com

Или

# mail -s "My Subject" you@yourdomain.com < msg.txt
11
13.04.2017, 15:36
2 ответа

Это определение POSIX из .dot :

Оболочка должна выполнять команды из файла в текущей среде .

Если файл не содержит / , оболочка должна использовать поисковый путь, указанный в $ PATH , чтобы найти каталог, содержащий файл. Однако, в отличие от обычного поиска команд , файл, который ищет утилита .dot , должен быть , а не исполняемым. Если файл, доступный для чтения, не найден, неинтерактивная оболочка будет прервана; интерактивная оболочка должна написать диагностическое сообщение для стандартной ошибки, но это условие не должно считаться синтаксической ошибкой.

Учитывая вышесказанное, вы можете просто заменить свой [-f ./file] && source ./file на . ./file вместе. Если файла нет, худшее, что может случиться, - это вы получите уведомление при входе в систему - я думаю, что, вероятно, вам нужна информация.

Конечно, если вы предпочитаете продолжить тест, вы можете сделать:

test -f ./file && . $_
11
27.01.2020, 19:57

В bash , . и источник являются синонимами. Заглянув в исходный код bash , файл builtin / source.def , вы увидите . и источник используют одну и ту же внутреннюю функцию source_builtin :

$BUILTIN source
$FUNCTION source_builtin
$SHORT_DOC source filename [arguments]
Execute commands from a file in the current shell.

Read and execute commands from FILENAME in the current shell.  The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.

Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.
$END

$BUILTIN .
$DOCNAME dot
$FUNCTION source_builtin
$SHORT_DOC . filename [arguments]
Execute commands from a file in the current shell.

Но источник не совместим с POSIX, поэтому, если ваш сценарий вызывается с POSIX / bin / sh , вы должны использовать . вместо источника . Поскольку POSIX не ограничивает оболочку, все указанные выше сценарии будут работать.

Лично я всегда использую . вместо источника . (Многие сценарии, которые я написал, работают под cron ).

19
27.01.2020, 19:57

Теги

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