В оболочке есть команда . (точка), которая исполняет команды
в файле в текущей оболочке, а не в подоболочке.
Изначально это было придумано для того, чтобы пользователю было
удобно перезапускать свой .profile и не приходилось бы для этого
выходить из системы и заново входить в нее, теперь же эта
команда применяется и в других целях:
code snippet start
$ cat /usr/you/bin/games
PATH=$PATH:/usr/games Добавить /usr/games в PATH
$ echo $PATH
:/usr/you/bin:/bin:/usr/bin
$ . games
$ echo $PATH
:/usr/you/bin:/bin:/usr/bin:/usr/games
$
Попробовал я создать простенький файл в текущей директории с командой echo.
code snippet start
$ echo 'echo hi' >ech
$ ls
ech
code snippet end
И исполнить его
code snippet start
$ . ech
dash: 33: .: ech: not found
code snippet end
Чзх?
Я использовал dash. Вроде как, самый трушный из доступных сегодня шеллов.
tldr; интерпретация команд через точку работает где как.
Я нашел доступное объяснение (загуглил) в руководстве z/os.
If there are slashes in the file name, . (dot) looks for the named file.
If there are no slashes . (dot) searches for file in the directories specified
in the PATH variable.
То есть, если путь до файла, который нужно исполнить не содержит косых черт - то оболочка ищет его в PATH. Если содержит косые черты (в моём случае ./ech) то будет исполнен этот файл.