Как и когда использовать команду Dot в Bash?

Во-первых, команду 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 в поиске файла для оценки.

Как использовать команду Dot в Bash?

Когда вы запускаете исполняемый скрипт как ./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 в Bash?

Наиболее очевидный вариант использования команды dot — это когда вы хотите изменить свой текущий контекст, установив новые переменные или изменив некоторые существующие. У вас также может быть скрипт, который рассчитывает изменить ваш текущий каталог с помощью cd. Это также может быть удобно при попытке запустить скрипт, у которого нет разрешения execute (x).