Какой исполняемый файл вызывается, если он вызван в сценарий через относительный путь?

Скажем, у меня есть этот скрипт mm в dir1 :

 #Contents of mm echo "Hello Main!" ./hd 

Мой pwd – dir2 , и теперь я выполняю mm :

 $ ../dir1/mm 

Существует исполняемый файл hd как в dir1 и в dir2 . Я попробовал, и hd в dir2 выполняется. Почему вместо hd в dir1 выполняется?

Поскольку выполнение файла не изменяет текущий рабочий каталог вашего процесса в каталог файла.

Исполняемый файл может выбрать его после его выполнения. Например, я иногда делаю:

 cd "$(dirname "$0")" 

в моем скрипте, чтобы убедиться, что мой текущий рабочий каталог является каталогом исполняемого файла, но он не обязан это делать.