Linux, команда, CDPATH · 4 min read · Jan 20, 2026
Советы/трюки по навигации в командной строке Linux 3 - переменная окружения CDPATH
В первой части этой серии мы подробно обсудили команду cd -, а во второй части мы углубились в команды pushd и popd, а также в сценарии, в которых они могут быть полезны.
Продолжая обсуждение аспектов навигации в командной строке, в этом уроке мы обсудим переменную окружения CDPATH через простые для понимания примеры. Мы также обсудим некоторые продвинутые детали, связанные с этой переменной.
** Переменная окружения CDPATH
* Даже если ваша работа в командной строке включает выполнение всех операций в определенной директории - скажем, в вашей домашней директории - вам все равно придется указывать абсолютные пути при переключении директорий. Например, рассмотрим ситуацию, когда я нахожусь в директории /home/himanshu/Downloads*:
$ pwd
/home/himanshu/DownloadsИ требуется переключиться в директорию /home/himanshu/Desktop. Для этого обычно мне придется либо выполнить:
cd /home/himanshu/Desktop/или
cd ~/Desktop/или
cd ../Desktop/Разве не было бы проще, если бы я мог просто выполнить следующую команду:
cd DesktopДа, это возможно. И здесь на помощь приходит переменная окружения CDPATH. Вы можете использовать эту переменную, чтобы определить базовую директорию для команды cd.
Если вы попробуете вывести ее значение, вы увидите, что эта переменная окружения по умолчанию пуста:
$ echo $CDPATH
$Теперь, учитывая случай, который мы обсуждали до сих пор, давайте используем эту переменную окружения, чтобы определить /home/himanshu как базовую директорию для команды cd.
Самый простой способ сделать это:
export CDPATH=/home/himanshuИ теперь я могу сделать то, что не мог сделать раньше - из директории /home/himanshu/Downloads успешно выполнить команду cd Desktop.
$ pwd /home/himanshu/Downloads $cd Desktop/ /home/himanshu/Desktop $
Это означает, что теперь я могу перейти в любую директорию под /home/himanshu, не указывая явно /home/himanshu или ~ или ../ (или несколько ../) в команде cd.
Важные моменты
* Итак, теперь вы знаете, как мы использовали переменную окружения CDPATH, чтобы легко переключаться между /home/himanshu/Downloads и /home/himanshu/Desktop. Теперь рассмотрим ситуацию, когда директория /home/himanshu/Desktop содержит поддиректорию с именем Downloads*, и именно в нее вы собираетесь переключиться.
Но вдруг вы понимаете, что выполнение cd Desktop приведет вас в /home/himanshu/Desktop. Поэтому, чтобы убедиться, что этого не произойдет, вы делаете:
cd ./DownloadsХотя в приведенной выше команде нет проблемы сама по себе, это дополнительное усилие с вашей стороны (как бы мало оно ни было), особенно учитывая, что вам придется делать это каждый раз, когда возникает такая ситуация. Более элегантным решением этой проблемы может быть первоначальная установка переменной CDPATH следующим образом:
export CDPATH=".:/home/himanshu"Это означает, что вы говорите команде cd сначала искать директорию в текущей рабочей директории, а затем пытаться искать в директории /home/himanshu. Конечно, хотите ли вы, чтобы команда cd работала таким образом, зависит полностью от ваших предпочтений или требований - моя идея, обсуждая этот момент, заключалась в том, чтобы дать вам знать, что такая ситуация может возникнуть.
Как вы, вероятно, поняли к этому моменту, как только переменная окружения CDPATH установлена, ее значение - или набор путей, которые она содержит - являются единственными местами в системе, где команда cd ищет директории (за исключением, конечно, сценариев, когда вы используете абсолютные пути). Поэтому, полностью зависит от вас, чтобы убедиться, что поведение команды остается последовательным.
Двигаясь дальше, если есть bash-скрипт, который использует команду cd с относительными путями, то лучше сначала очистить или удалить переменную окружения CDPATH, если вы не хотите оказаться в непредвиденных проблемах. В качестве альтернативы, вместо того чтобы использовать команду export в терминале для установки CDPATH, вы можете установить переменную окружения в вашем файле .bashrc после тестирования для интерактивных/неинтерактивных оболочек, чтобы убедиться, что изменение, которое вы пытаетесь внести, отражается только в интерактивных оболочках.
Порядок, в котором пути появляются в значении переменной окружения, также важен. Например, если текущая директория указана перед /home/himanshu, то команда cd сначала будет искать директорию в текущей рабочей директории, а затем перейдет к /home/himanshu. Однако, если значение равно “/home/himanshu:.”, то первый поиск будет выполнен в /home/himanshu, а затем в текущей директории. Не нужно говорить, что это повлияет на то, что делает команда cd, и может вызвать проблемы, если вы не осведомлены о порядке путей.
Всегда имейте в виду, что переменная окружения CDPATH, как следует из названия, работает только для команды cd. Это означает, что находясь в директории /home/himanshu/Downloads, вы можете выполнить команду cd Desktop, чтобы переключиться в директорию /home/himanshu/Desktop, но вы не можете выполнить ls. Вот пример:
$ pwd
/home/himanshu/Downloads
$ ls Desktop
ls: cannot access Desktop: No such file or directory
$Тем не менее, могут быть некоторые простые обходные пути. Например, мы можем достичь того, что хотим, с минимальными усилиями следующим образом:
$ cd Desktop/;ls
/home/himanshu/Desktop
backup backup~ Downloads gdb.html outline~ outline.txt outline.txt~Но да, может не быть обходного пути для каждой ситуации.
Еще один важный момент: как вы могли заметить, каждый раз, когда вы используете команду cd с установленной переменной окружения CDPATH, команда выводит полный путь директории, в которую вы переключаетесь, в выводе. Не нужно говорить, что не каждый захочет иметь эту информацию каждый раз, когда они выполняют команду cd на своем компьютере.
Чтобы убедиться, что этот вывод подавляется, вы можете использовать следующую команду:
alias cd='>/dev/null cd'Указанная команда отключит вывод, когда команда cd будет успешной, но позволит выводить сообщения об ошибках, когда команда не удастся.
Наконец, если вы столкнетесь с проблемой, когда после установки переменной окружения CDPATH вы не можете использовать функцию автозаполнения оболочки, вы можете попробовать установить и включить bash-completion - больше об этом здесь.
Заключение
Переменная окружения CDPATH - это двусторонний меч - если ее не использовать с осторожностью и полным знанием, она может привести вас в сложные ловушки, которые могут потребовать много вашего драгоценного времени для решения. Конечно, это не значит, что вам никогда не следует пробовать; просто оцените все доступные варианты, и если вы придете к выводу, что использование CDPATH будет очень полезным, то вперед и используйте его.
Вы использовали CDPATH как профессионал? У вас есть еще советы, которыми вы хотите поделиться? Пожалуйста, поделитесь своими мыслями в комментариях ниже.
**
Get new posts in your inbox
No spam. Unsubscribe anytime.