Поиск по сайту:

Советы/рекомендации по навигации в командной строке Linux 3 — переменная среды CDPATH


На этой странице

  1. Переменная среды CDPATH
  2. О чем следует помнить
  3. Заключение

В первой части этой серии мы подробно обсудили команду cd, а во второй части мы подробно рассмотрели команды pushd и popd, а также сценарии, в которых они пригодятся.

Продолжая обсуждение навигации в командной строке acontainer.style.width=100%;var ins=document.createElement(ins);ins.id=slotId+-asloaded;ins.className=adsbygoogle ezasloaded;ins.dataset.adClient=pid ;ins.dataset.adChannel=cid;if(ffid==2){ins.dataset.fullWidthResponsive=true;}

Переменная среды CDPATH

Даже если ваша работа с командной строкой связана с выполнением всех операций в определенном каталоге, например в вашем домашнем каталоге, вам также необходимо указать абсолютные пути при переключении каталогов. Например, рассмотрим ситуацию, когда я нахожусь в каталоге /home/himanshu/Downloads:

$ pwd
/home/himanshu/Downloads

И необходимо переключиться в каталог /home/himanshu/Desktop . Для этого, как правило, мне нужно либо запустить:

cd /home/himanshu/Desktop/

или

cd ~/Desktop/

или

cd ../Desktop/

Было бы легко, если бы я мог просто запустить следующую команду:

cd Desktop

Да, это возможно. И здесь на помощь приходит переменная окружения CDPATH. Вы можете использовать эту переменную для определения базового каталога для команды cd.

Если вы попытаетесь напечатать его значение, вы увидите, что эта переменная env по умолчанию пуста:

$ 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 есть подкаталог с именем Загрузки, и вы собираетесь переключиться на него.

Но вдруг вы понимаете, что выполнение cd Desktop приведет вас к /home/himanshu/Desktop. Итак, чтобы этого не произошло, вы делаете:

cd ./Downloads

Хотя в вышеупомянутой команде нет проблем как таковой, это дополнительные усилия с вашей стороны (какими бы незначительными они ни были), особенно если учесть, что вам придется делать это каждый раз, когда возникает такая ситуация. Более элегантным решением этой проблемы может быть установка переменной CDPATH следующим образом:

export CDPATH=".:/home/himanshu"

Это означает, что вы говорите команде cd сначала искать каталог в текущем рабочем каталоге, а затем попытаться выполнить поиск в каталоге /home/himanshu. Конечно, хотите ли вы, чтобы команда cd вела себя таким образом, полностью зависит от ваших предпочтений или требований — моя идея, стоящая за обсуждением этого вопроса, заключалась в том, чтобы сообщить вам, что такая ситуация может возникнуть.

Как вы уже поняли, после установки переменной env 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-дополнение — подробнее об этом здесь.

Заключение

Переменная среды CDPATH — это палка о двух концах: если ее не использовать с осторожностью и полным знанием, она может привести вас к некоторым сложным ловушкам, для решения которых может потребоваться много вашего драгоценного времени. Конечно, это не означает, что вы никогда не должны пробовать; просто оцените все доступные варианты, и если вы решите, что использование CDPATH было бы очень полезно, тогда используйте его.

Вы использовали CDPATH как профессионал? У вас есть еще несколько советов, которыми вы можете поделиться? Пожалуйста, поделитесь своими мыслями в комментариях ниже.