Кто-нибудь может объяснить мне, что делает оболочка в двух примерах А) и Б) ниже? Это очевидно ведет себя по-разному, но я не могу выяснить, почему результат отличается.
Пример:
у нас будет скрипт в нашем текущем каталоге, названный bla.sh
только одной командой:
echo ${0##/*} hello
А) Начинается
как: ./bla.sh
дает:./bla.sh hello
Б)
Начинается как: . bla.sh
дает:-bash hello
Поскольку я использую это в скрипте, второй вывод (из-за "-" перед -bash) убивает команду. Конечно, простое --
раньше ${...}
помогло, но мне бы очень хотелось понять, чем обусловлен выход в первую очередь.
Я люблю Баш. И ви [м]. Но я отвлекся ...
source
это псевдоним bash.
, а не наоборот, иsource
он не будет работать в других оболочках../<cmd>
выполнит<cmd>
программу, находящуюся в текущем каталоге, в новом (разветвленном) процессе. Это должно быть исполняемым. И также читается это начинается с#!
.. <cmd>
заставит вашу текущую оболочку выполнить сценарий оболочки,<cmd>
который находится в вашем$PATH
или текущем каталоге в текущем процессе оболочки. Это должно быть читабельным. Это псевдоним для команды оболочкиsource
.источник
. <cmd>
будет искать программу в,$PATH
и если она не найдена, то она будет искать в текущем каталоге.. ./cmd
./cmd
использует явный путь (./
- текущий каталог) к исполняемому файлу. И не обязательно, чтобы это начиналось с#!
.. cmd
- (иначеsource
) - встроенная команда bash. Одно из видимых отличий в выполненииsource
: он может устанавливать / изменять переменную окружения текущей оболочки.источник
source
псевдоним только для bash.
(который является стандартным)