В чем разница между «источником» и «.»?

147

В чем разница между выполнением скрипта (например, / some / script) с помощью source /some/scriptи . /some/scriptв Bash?

binW
источник

Ответы:

134

sourceи .являются синонимами в Bash .

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

kiamlaluno
источник
где это определяется? Я имею ввиду псевдоним для источника или это что-то еще?
binW
точно то же самое
12
@binW: .традиционная исходная команда, унаследованная от древней оболочки Борна. sourceэто просто встроенная команда bash, которая делает то же самое, что и ., предположительно, потому что она более читабельна ( .один может быть трудно обнаружить маленьким шрифтом). Вы увидите help sourceи help .показывает ту же информацию.
Гейра
3
@binW: Если вы заглянете, man bashа затем выполните поиск, sourceвы увидите, что source filename [arguments]это синоним . filename [arguments].
Мэтью Ранкин
46

.является синонимом sourceв bash, но не в POSIX sh, так что вы должны использовать, .если ваш скрипт запускается / bin / sh. Обратите внимание, что bash утверждает, что работает как POSIX sh, когда вызывается как / bin / sh, но принимает sourceбез жалоб.

Такое поведение меня укусило, например, скрипты, протестированные с использованием bash, так как / bin / sh не работают при запуске под ash.

JJG
источник
16
POSIX не ограничивает оболочку. POSIX просто говорит; оболочка должна поддерживать хотя бы эту функцию. Таким образом, оболочка POSIX свободна для реализации дополнительных функций, если реализованы описанные в POSIX. Когда шебанг говорит, что #!/bin/shвы никогда не должны предполагать, что оболочка поддерживает что-то кроме функций POSIX. pubs.opengroup.org/onlinepubs/9699919799/utilities/…
гейра
На вас может повлиять порядок поиска имен: unix.stackexchange.com/q/17815/8250
Lekensteyn
3
Этот ответ помог мне, так как sh часто используется в cron.
dfrankow