Во-первых, команду Dot (.) не следует путать с точкой перед названием файла или обозначением относительного пути. Например, папка ~/.ssh является скрытой папкой, использующей обозначение файла dot, которое вам нужно будет использовать ls -a для просмотра этой папки. И ./my-script.sh — это относительный путь к скрипту с именем “my-script.sh” в текущей папке. Использование команды Dot было бы таким: . myscript.sh.
Команда Dot (.), она же полная остановка или точка, — это команда, используемая для оценки команд в текущем контексте выполнения. В Bash source команда является синонимом команды dot (.), и вы также можете передавать параметры команде, будьте осторожны, это отклоняется от спецификации POSIX.
.: . 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.
👉 Если вы не укажете точный путь к имени файла, Bash будет использовать $PATH в поиске файла для оценки.
Когда вы запускаете исполняемый скрипт как ./my-script.sh, команды выполняются в новой подоболочке, в то время как при запуске как . my-script.sh будет использоваться текущий контекст оболочки. Как правило, вашим текущим контекстом является окно вашего терминала. Это означает, что команда dot применит изменения к вашей текущей командной строке. Давайте рассмотрим простой пример ниже.
#!/usr/bin/env bash export A="hello world" echo $A
При запуске от имени исполняемого файла с помощью ./my-script.sh, переменная A не экспортируется в вашу текущую оболочку и просто возвращает пустой результат.
$ ./test.sh hello world $ echo $A
При запуске того же скрипта с командой dot с помощью . my-script.sh, ваш текущий контекст оболочки будет изменен.
$ . test.sh hello world $ echo $A hello world
Наиболее очевидный вариант использования команды dot — это когда вы хотите изменить свой текущий контекст, установив новые переменные или изменив некоторые существующие. У вас также может быть скрипт, который рассчитывает изменить ваш текущий каталог с помощью cd. Это также может быть удобно при попытке запустить скрипт, у которого нет разрешения execute (x).