Что такое быстрый способ командной строки для переключения между несколькими каталогами для системного администрирования? Я имею в виду, что я могу использовать pushd .
и popd
для переключения, но что если я захочу хранить кратные числа и циклически их перебирать, вместо того, чтобы постоянно выталкивать их из нижней части стека?
bash
shell-script
administration
Volomike
источник
источник
$CDPATH
возможно?cd -
после того, как спровоцировал поиск в Google.cd
везде вручную. Было больно. Использовал автозаполнение с помощью клавиши табуляции, хотя.Ответы:
Используйте ,
pushd
а затем специальные имена каталогов в вашем стеке каталогов:~1
,~2
и т.д.Пример:
Наиболее эффективный способ использовать
pushd
этот способ - загрузить список каталогов, затем добавить еще один каталог в качестве текущего каталога, а затем вы можете переходить между статическими числами, не влияя на положение каталогов в вашем стеке.Также стоит отметить, что
cd -
вы попадете в последний каталог, в котором вы были. Так и будетcd ~-
.Преимущество
~-
над только в-
том , что-
является специфичным дляcd
, в то время как~-
расширяется вашей оболочки так же, как~1
,~2
и т.д. есть. Это удобно при копировании файла между очень длинными путями каталогов; например:Вышеуказанное эквивалентно:
источник
cd -
cd -
действует как ForthDROP DUP
, например, если вы начинаете с в каталоге a , со стеком abcd , acd -
изменяет стек на bbcd . Возможно, этоbash
ошибка, так как секундаcd -
меняет стек обратно на abcd . Из этого мы можем сделать вывод, чтоcd -
в дополнение к изменению стека используется некоторая отдельная структура данных для хранения предыдущего каталога.cd -
использует$OLDPWD
и ничего больше.cd -
раньше была функция bash , затем они добавили стек, но боялись сломать старый код больше, чем хотели более простой дизайн. Коррекция к предыдущему,cd -
действует примерно как Forth.OLDPWD @ SWAP OLDPWD ! DUP .
В отличие от этогоcd foo
,cd -
печатает имя замененного каталога.bash
«S встроенныйpushd
с+
и-
параметры могут вращаться стек каталогов. Синтаксис может немного сбить с толку, возможно, потому, что этот стек является массивом на основе нуля . Эти простые функции-обертки циклически перемещаются по стеку каталогов:Тест: настроить стек из четырех каталогов.
Теперь / tmp является текущим каталогом, а стек выглядит так:
Перейдите к следующему каталогу в стеке (и покажите его) четыре раза:
Выход:
Перейдите к предыдущему каталогу в стеке (и покажите его) четыре раза:
Выход:
Примечание
cd -
: ответ Wildcard помог проиллюстрировать, какcd -
не используется массив $ DIRSTACK (он использует переменную $ OLDPW ), так чтоcd -
это не влияет на $ DIRSTACK так, как должен использоваться своп на основе стека. Чтобы исправить это, вот простая своп- функция на основе $ DIRSTACK :Контрольная работа:
Выход:
источник
popd
, чтобы удалить его, не меняя директорий, сделайтеpopd -n
. Для очистки стека делайdirs -c
. Жаль, что дизайнеры bash похоронили такие полезные функции в неинтуитивном синтаксисе. Смотритеman bash
подpushd
,dirs
и т.д.Я предлагаю вам установить FASD . Это дает вам возможность быстро перейти к любому каталогу, в котором вы уже были, введя только небольшую часть его имени.
Пример: если вы посетили
/home/someName/scripts/
, вы можете перейти туда, просто набрав,z scr
например. Это намного удобнее, чем запоминать порядок в стеке истории или что-то подобное.источник
Когда вы
cd
где-то, Bash хранит старый рабочий каталог переменную окружения$OLDPWD
.Вы можете переключиться обратно в этот каталог с помощью
cd -
, что эквивалентноcd "$OLDPWD"
.Вы можете прыгать туда-сюда между каталогами следующим образом:
источник
Я написал скрипт
xyzzy
для этого:Я использую это для копирования в
/usr/bin
папку, а затемchmod a+x
на нее. Затем я редактирую свой root и~/.bashrc
файл учетной записи пользователя, чтобы включить эти строки внизу:«Xy» - это сокращенная форма команды для быстрого набора текста.
Затем я могу сохранить текущий каталог в списке с помощью ...
... и повторите при необходимости. Как только я заполняю этот список необходимыми каталогами, они остаются там до тех пор, пока я не перезагружаю компьютер, потому что именно тогда / tmp снова очищается. Я могу тогда напечатать ...
... для просмотра списка сохраненных каталогов. Для того, чтобы перейти в каталог, у меня есть два варианта. Один из вариантов - указать путь по индексу (и это индекс на основе 1) следующим образом:
... который переключился бы на каталог, который является вторым пунктом в списке. Или я мог бы опустить индекс и просто сделать:
... чтобы он прошел через каждый каталог, как мне нужно. Чтобы получить больше команд, введите:
Конечно, работать веселее с глупыми эхо-заявлениями, которые я добавил.
Обратите внимание, что xyzzy - это ссылка на текстовое приключение в Collosal Cave , где ввод xyzzy позволит вам переключаться между двумя комнатами в игре, чтобы избежать неприятностей.
источник
Я использую небольшой скрипт с именем z [link] , который также может быть интересен, даже если он не выполняет то, что вы просили.
источник
Есть также
cd_func
от Петра Маринова, в основномcd
с историей до 10 записей: http://linuxgazette.net/109/misc/marinov/acd_func.htmlПросто используйте
cd --
для отображения списка из последних 10 каталогов, в которые вы редактировали,cd
иcd -N
(гдеN
находится индекс записи), чтобы перейти туда.источник
Я в основном использую ZSH с профилем oh-my-zsh . Вы можете ввести в терминал следующее совпадение:
Затем вы можете просто использовать стрелки (вверх и вниз), чтобы просмотреть всю историю оболочки, которая показывает только те записи, которые начинаются с символов выше. Так, например, если вы пошли в
/home/morfik/Desktop/
и/home/morfik/something/
, вы можете очень быстро переключаться между каталогами. Неважно, сколько записей в истории оболочки у вас есть, но когда у вас их много, просто используйте лучшее выражение, то есть,cd /home/morf
и здесь нажимайте стрелки вверх / вниз на клавиатуре.Есть и другой способ достижения решения. В этом случае вы должны использовать tmux и FZF . Затем вы просто создаете горячую клавишу, например ctrl-r, и когда вы нажимаете ее, ваше текущее окно будет разделено, и вы увидите это:
Теперь вы можете использовать выражения для поиска в списке. Я только что набрал
^cd /media
, который возвращает только те записи, которые начинаются с фразы. Конечно, вы можете просто набрать,'cd 'home
чтобы соответствовать команде, а также полное имя каталога (не путь, просто имя):источник
Вы можете достичь этого с помощью нескольких псевдонимов в вашем
~/.bashrc
(или эквивалентном)Основная цель - почти минимальный набор текста (например,
d5
переход к каталогу № 5 в пуле) для переключения между каталогами в пуле. Также мы хотим упростить добавление / удаление каталогов в / из пула:Теперь каждый раз, когда вы помещаете каталог в стек, он добавляется в нумерованный пул в позиции 0 (текущий каталог), и вы можете перемещаться (переключать каталоги), используя очень мало ввода (
d<N>
), и вы можете просматривать свой нумерованный текущий пул в любом время, просто набравd
.Несколько примеров использования этих псевдонимов:
Показать нумерованный dir-пул, (текущий dir # 0)
Переключение между каталогами: используйте
d<N>
Добавить новый каталог в пул
Прыгай еще немного:
Удалить / вытащить верхний (текущий) каталог из пула
источник
Если у вас установлен iselect , вы можете сделать что-то вроде этого:
Это даст вам полноэкранное интерактивное навигационное меню со стрелками на основе ncurses, чтобы выбрать каталог
cd
для.Если вы не использовали
pushd
в текущем сеансе оболочки, список каталогов в меню начинается с одной записи - вашего текущего каталога. Если есть только одна запись, этотdirselect
псевдоним будетcd
отображаться без экрана меню, поэтому он фактически ничего не делает (кроме того, что мешаетcd -
делать что-либо полезное)Чтобы добавить новый каталог в список, используйте
pushd dir
(илиpushd -n dir
чтобы добавить в него каталог безcd
-ing)Вы можете предварительно заполнить
pushd
стек, выполнив что-то вроде следующего в вашем.bashrc
или~/.bash_profile
:Вы можете удалить записи с помощью
popd
илиpopd -n
.Смотрите
help pushd
,help popd
иhelp dirs
в bash для получения дополнительной информации. И, конечно же ,man iselect
.КСТАТИ,
iselect
вероятно, доступен предварительно упакованный для вашего дистрибутива. Это для Debian и Ubuntu и т. Д., И, вероятно, для других тоже.источник
Если у вас есть 5 или 10 каталогов, которые вы часто используете , и вам не обязательно беспокоиться о недавно использованных 5 или 10 каталогах, настройте некоторые псевдонимы команд, такие как
И поэтому, когда я хочу перейти в каталог домашней страницы Apache, я просто набираю,
cdw
как я ответил в Эквивалент псевдонима для символической ссылки? ,источник
Я использую прыжок, чтобы быстро изменить рабочий каталог.
Чтобы добавить текущий каталог:
Чтобы перечислить все ваши закладки:
например:
Теперь вы можете легко перейти в другой каталог:
Поддерживает автозаполнение для bash и zsh.
Изменить (в ответ на @Joe): двоичный файл
jump-bin
хранится в/usr/local/bin
, и с помощью сценария интеграции bash (на моем компьютере, расположенном в/var/lib/gems/1.9.1/gems/jump-0.4.1/bash_integration/shell_driver
), он создает функцию bash,jump
которая вызываетjump-bin
.источник
Я использую
alias
для навигации. Если у вас мало каталогов, к которым часто обращаются, просто установите псевдонимы. Например,Тогда просто
примет вас
/etc
.источник