Это хорошая идея, чтобы использовать следующий псевдоним:
cd() {
pushd $1;
}
в баш?
Я думаю, что это было бы очень полезно, так как тогда я могу использовать серию popd
s вместо cd -
одного.
Есть ли случай, когда это может быть проблемой?
bash
shell
shell-script
alias
Lazer
источник
источник
alias cd=pushd
?pd
? Вы единственный пользователь и администратор вашей системы?autopushd
Ответы:
Лично у меня есть это в моем bashrc и использую их все время:
Затем вы можете перемещаться по командной строке, как браузер.
cd
меняет каталог.back
переходит в предыдущий каталог, из которого выcd
редактировали Иflip
будет перемещаться между текущим и предыдущим каталогами, не выталкивая их из стека каталогов. В целом, это прекрасно работает.Единственная реальная проблема, о которой я знаю, это то, что это набор команд, к которым я полностью привык, но не существует на чужой машине. Так что, если мне придется использовать чужую машину, это может немного расстроить. Если вы привыкли просто использовать
pushd
иpopd
напрямую, у вас нет этой проблемы. И в то время , если вы просто псевдонимcd
ставить неpopd
, вы не будете иметь проблемыback
не существует, вы по- прежнему есть проблема , чтоcd
не делает совсем то , что вы ожидаете на других машинах.Я хотел бы отметить, однако, что ваша конкретная реализация
cd
не совсем работает так, какcd
если бы нормальcd
сама по себе попадет в ваш домашний каталог, а ваша - нет. Версия, которая у меня есть, не имеет этой проблемы. Мое также добавляетсяDIRSTACK
к передней частиdirs
распечатки, но это больше вопрос личного вкуса, чем чего-либо еще.Итак, как я уже сказал, я использую эти псевдонимы все время и не имею проблем с ними. Просто может быть немного неприятно использовать другую машину, а потом найти их там (что не должно удивлять, но это одна из тех вещей, которую вы используете так часто, что не думаете о них) таким образом, если они не работают так, как вы привыкли, это может удивить).
источник
<C-o>
чтобыpopd
для подлинного опыта.Это не прямой ответ на вопрос, но я влюбился в окно истории каталогов в 4DOS. Настолько, что я написал свою собственную версию для Linux (и Cygwin). Я никогда не удосужился сделать его легким в установке утилита, но если вы знаете свой путь вокруг Bash подсказку, это не должно быть , что трудно получить работу. Ваш вопрос вдохновил меня поместить его в репозиторий Git и загрузить на GitHub: dirhistory .
По сути, это демон, который собирает изменения каталогов со всех ваших оболочек, и программа Cdk, которая отображает историю и позволяет вам выбрать любой каталог для переключения (так что вы не ограничены стеком). Я нахожу это действительно полезным, и привязал его к Ctrl-PageUp, как это сделал 4DOS. (Я даже исправил PuTTY, чтобы он посылал Ctrl-PageUp в Bash.)
источник
Для меня pushd / popd / dirs близок к полезному, но отсутствует. Поэтому я создал «обертку» вокруг них, называемую «navd», реализованную как набор из 20 псевдонимов. (На самом деле одна из них - функция.) Код приведен ниже, но сначала приведем краткое объяснение. (Одна приятная вещь о «navd» и работе на чужих машинах: есть форма «no-install» для его запуска: в качестве одного из вариантов установки вы можете просто вставить команды, которые реализуют «navd», в командной строке bash и во время этой bash-сессии для этой машины будет работать navd. Это дает нулевой отпечаток в файловой системе, но это временная установка. Поместите эти команды в .bashrc для «реальной» установки, курс.)
Особенности:
Любая из девятнадцати команд navd <N> вращает стек так, что каталог, который становится текущим каталогом, теперь также отображается в начале стека. Положительные значения <N> находят dir, считая слева, с индексацией, начинающейся с нуля. Отрицательные значения <N> находят dir, считая от ПРАВА, с индексированием, начинающимся с -1. (Это следует соглашению о том, как индексы массива могут использоваться в Java и других языках.)
Примечание. Любая команда «navd» отображает тот же стек, который используют «pushd» и «dirs», но отображает его БЕЗ самой левой записи, которую отображает «dirs» (поскольку эта запись в действительности не находится в стеке - она текущий каталог и «dirs» изменяют крайнюю левую запись, если введена команда cd). (Команда "cd <path>" не влияет на поведение navd, хотя она, безусловно, влияет на поведение pushd / dirs / popd. Также ... Мне нравится использовать "cd -", чтобы вернуться "назад" один раз к директория, с которой я только что ушел, и cd - также не влияет на поведение navd.)
Бонус: может быть еще 19 псевдонимов, которые НЕ вращают стек, а просто меняют dir на место, указанное в стеке.
2-й бонус: «navh» показывает команды navd <path> из истории, для легкой загрузки стека с помощью cut-n-paste. (Каждый из них указан только один раз, даже если он находится в истории несколько раз, а список отсортирован. Кроме того, записи могут быть помещены в файл $ HOME / .navhignore, чтобы эти точные записи не появлялись в списке навигации).
Три ключевых поведения:
Если вы очистите стек и повторите определенную команду «navd <путь>», этот путь будет идти в стеке. Это то, что я хочу и ожидаю ... но pushd этого не делает - он помещает текущий стек, которым вы пользуетесь, ОТКРЫТЬСЯ в стек - так что эффект в стеке является переменным (кажется непредсказуемым), когда вы повторяете команду ,
«navd <путь>» не будет помещать один и тот же путь в стек дважды.
«navd <путь>» помещает себя в историю команд с абсолютным путем, даже если для команды был введен относительный путь.
Для меня последние три описанных поведения делают использование команды «navd <path>» из истории гораздо более полезным, чем использование «pushd <path>» из истории. Я действительно могу повторно использовать историю, чтобы ходить по местам. И когда я делаю это, я не "портю" свой стек.
Если вы можете и хотите обернуть вокруг себя свой мозг, вы можете переключаться между режимами navd и pushd / dirs / popd. Оба используют один и тот же стек; просто с другим стилем. Например, используйте «popd», чтобы удалить вещи из стека «navd», или «dirs -c», чтобы очистить стек navd.
Подумайте о pushd / dirs / popd как о "как мне повторить мои шаги?"
Думайте о navd как о том, «как мне сохранить набор избранных каталогов и легко переключаться между ними?».
Вставьте следующее в окно терминала, и вы можете сразу же начать использовать navd на время сеанса терминала. Это весь код этой функции.
Эти псевдонимы основаны на командах "bash". Особое внимание уделяется сохранению нормального поведения «CD -». (Большую часть времени я использую «cd -» вместо того, чтобы беспокоиться о pushd или navd, потому что «cd -» очень удобен для возврата к последнему «месту», где вы были, или для переключения между только 2 местами, и он работает везде без установки.)
Эти команды, конечно, могут быть помещены в файл .bashrc для более постоянной их установки.
источник
Вот еще одно решение, которое вам может понравиться. Я написал это после игры с решением @cjm. Он использует команду dialog для создания меню типа ncurses из вывода dirs. Выбор элемента приведет к тому, что этот каталог окажется на вершине стека и перейдет в него. Это имеет преимущество перед dirhistory: каждый эмулятор терминала имеет свой собственный буфер истории каталогов, и его немного проще установить.
Для установки: После того, как вы установили псевдоним cd для pushd, установите диалоговое окно, а затем просто добавьте эту функцию в ваш bashrc:
Мне это нравится немного лучше, чем запускать dirs -v, а затем запускать другую команду для pop или cd в каталог, который я хочу. Диалоговое меню также может быть настроено с помощью своего диалогового окна.
Поэтому, чтобы ответить на ваш вопрос, да, я думаю, что псевдоним pushd для cd - отличная идея. У вас вряд ли будут проблемы с переполнением буфера, если вы регулярно перезагружаете свой компьютер хотя бы для обновления. Хотя я бы с осторожностью использовал cd при написании скриптов; cd в цикле while может вызвать проблемы переполнения буфера. Я не уверен, что контролирует размер буфера dirs / pushd.
источник