Яка різниця між "джерелом" та "."?


147

Яка різниця між виконанням сценарію (наприклад, / якийсь / скрипт) з source /some/scriptта . /some/scriptв Bash?

Відповіді:


134

sourceі .є синонімами в Bash .

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


де це визначено? Я маю на увазі, є. псевдонім для джерела чи це щось інше?
binW

точно те саме

12
@binW: .традиційна команда джерела, успадкована від давньої оболонки бурна. sourceце просто bash вбудований, який робить точно так само, як ., мабуть, тому, що це читабельніше ( .окремо може бути важко помітити невеликим шрифтом). Ви побачите help sourceта help .покажете ту саму інформацію.
geirha

3
@binW: Якщо ви заглянете man bashі шукаєте, sourceви побачите, що source filename [arguments]це синонім . filename [arguments].
Метью Ранкін

45

.є синонімом sourceв bash, але не в POSIX sh, тому вам слід скористатися, .якщо ваш скрипт виконує / bin / sh. Зауважте, що bash-претензії виконуються як POSIX sh, коли викликаються як / bin / sh, але приймаються sourceбез скарги.

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


16
POSIX не обмежує оболонку. POSIX просто каже; оболонка повинна підтримувати принаймні цю і ту особливість. Таким чином оболонка POSIX вільна реалізовувати додаткові функції до тих пір, поки реалізовані описані POSIX. Коли shebang каже, що #!/bin/shви ніколи не повинні вважати, що оболонка підтримує будь-що, крім функцій POSIX. pubs.opengroup.org/onlinepubs/9699919799/utilities/…
geirha

На вас може вплинути порядок пошуку імен: unix.stackexchange.com/q/17815/8250
Lekensteyn

2
Ця відповідь мені допомогла, оскільки ш часто використовується в хроні.
dfrankow
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.