Если вы беспокоитесь об использовании cd
на самом деле о перемещении рабочего каталога текущей оболочки, вы можете использовать подстановку команд, которая выполняет cd
в подоболочке, которая безвредно исчезает:
d=$(cd some-name)
Например:
$ mkdir /tmp/{a..d}
$ CDPATH=/tmp
$ cd /
$ pwd
/
$ dir=$(cd c)
$ printf '%s\n' "${dir%/*}"
/tmp
$ pwd
/
Здесь я записал вывод из cd c
в предположении, что запись в CDPATH
ему удовлетворяет. Результатом является новый рабочий каталог, поэтому, чтобы вернуть соответствующую запись пути из CDPATH
, я использую расширение параметра, чтобы удалить последнюю косую черту и далее --, по сути, имя самого глубокого каталога. Он преобразует /tmp/c
в /tmp
выше.