Иногда, когда я хочу перейти в родительский каталог, я ошибочно набираю cd ,,
вместо cd ..
. Есть ли способ, которым я могу заставить bash считать эти утверждения одинаковыми? Я никогда не использую запятые в моих командах. В идеале я хотел бы псевдоним ,,
на ..
. Когда я попробовал это, это не сработало. Почему это не сработало? Как еще я могу подойти к этой проблеме?
$ alias ,,=..
$ cd ,,
-bash: cd: ,,: No such file or directory
$ ,,
жаловался бы, как таковойbash: ..: Is a directory
. (Другими словами, это не исполняемый файл.)alias 'cd ,,'='cd ..'
. Ну, вы могли бы, но вам нужно было бы выполнить это,cd\ ,,
чтобы сделать все это одним словом.)alias -g ,,=..
иcd ,,
работает так, как вы ожидаете.find / -type d -exec ln -s .. {}/,, \;
... ;-)Ответы:
ЗШ:
Если вы используете
zsh
alias -g ,,=".."
то, что вам нужно, но это приведет к тому, что «,,» будет расширяться везде, а не только при использовании сcd
.От
man zshbuiltins
:BASH:
Если ограничено
bash
(поскольку вопрос помечен как bash ), прочитайте следующее:Как и требовалось, это чисто псевдонимное решение, однако оно сделает больше, чем требуется, возможно, расстроит пользователя (см. Предупреждение в конце моего поста).
Цитирование
man bash
:Поэтому достаточно псевдоним
cd
с дополнительным пробелом (чтобы разрешить расширение его следующего аргумента), а затем псевдоним,,
для..
. Видеть, чтодает именно то, что вам нужно.
Обратите внимание, что это верно не только для
bash
(и егоalias
реализации), но и для всех POSIX-совместимых оболочек. Цитируя пример изman 1p alias
(руководство не описывает эту функцию явно, только через пример):Предупреждение: как пишет @PeterCordes в своем комментарии, это автоматически приведет к расширению других псевдонимов при записи после
cd
. Это может потребовать от вас написать,cd \grep
если вы хотите изменить каталог на один с именем,grep
но вашgrep
псевдоним дляgrep --color=auto
. Без обратной косой чертыcd
сообщит об ошибке «слишком много аргументов» (вы не можете одновременно работатьcd
с двумя каталогами) !.источник
cd
войти в каталог с его исходным кодом. Или другие конфликты между вашими псевдонимами и общими именами каталогов. Какcd dr
бы расширятьсяcd disown -r
для меня, с этим псевдонимом. В любом случае, гораздо лучше переопределить встроеннуюcd
функцию для подобных вещей, IMO.Псевдонимы не предназначены для этого, но вы можете создать функцию с именем
cd
обертки для реальногоcd
. Этот работает для меня! Просто поместите его в свой.bash_profile
файл профиля или по вашему выбору.Или с комментариями и красивым форматированием:
РЕДАКТИРОВАТЬ
Спасибо @derobert за указание, что
if then else
здесь лучше, чем&& ||
. Кроме того, я только что понял ( * facepalm *), что эта реализация будет работать только в том случае, если какие-либо аргументы без пути (т.е.-L -P
) не являются первым аргументом. Так что будьте осторожны, если у вас есть плохая привычка печатать,cd -L ,,
это не поможет вам. И я думаю, что с этим нетривиально обращаться правильно.источник
$1
перед выполнением встроенного:cd () { [ "$1" = ",," ] && set .. ; cd "$@"; }
set .. "${@:2}"
, или вы что-то потеряете после первого аргумента...
не должно быть первым аргументом;cd
вbash
может принимать различные варианты (-P
,-L
,-@
,-e
).Псевдонимы должны быть первым словом команды. Кроме того, псевдоним должен быть заменен на слово, поэтому без пробелов).
Вы могли бы псевдоним как
..
и,,
бытьcd ..
.источник
cd ..
..
в Bash - использоватьshopt -s autocd
любой каталог, просто введя его имя. Конечно, вы все еще псевдоним для,,
Еще один способ сделать
..
изменить каталог, чтобы включить в Bashautocd
функции :Это автоматически изменит каталог, когда вы введете имя одного:
Вы все еще должны сделать псевдоним для,
,,
но это может быть сделано только сalias ,,=..
источник
Уже
есть приложениедля этого: https://github.com/shyiko/commacd (нет связи со Стэнли Шуйико).Чтобы ответить на ваш вопрос, скрипт добавляет псевдонимы к трем функциям, которые он определяет:
источник