Могу ли я использовать cd../.. в качестве псевдонима?
Я использую Windows и Ubuntu параллельно и выполняю консольные действия на них обоих.
На Windows я могу сделать
C:\Users\Thomas>cd..\..
C:\>
Однако в Linux это не работает ни с обратной косой чертой, ни с прямой косой чертой.
21:17:10 $ cd../..
bash: cd../..: No such file or directory
Поскольку я часто совершаю эту ошибку, я попытался определить псевдоним в .bash_aliases
для этой ситуации:
alias cd../..='cd ../..'
alias cd..\..='cd ../..'
Когда я начинаю новый Bash, я получаю
21:16:26 $ bash
bash: alias: `cd../..': invalid alias name
Как бы я создал псевдонимы для cd..\..
а также cd../..
правильно?
cd..\..
похоже, есть проблемы с escape-символом:
21:39:43 $ cd..\..
bash: cd....: command not found
Это не работает, даже если я определю другой псевдоним для cd....
,
4 ответа
/
а также \
находятся среди символов, которые не могут появляться в псевдониме Bash. От man bash
:
Персонажи
/
,$
, `, и=
и любые метасимволы оболочки или символы цитирования, перечисленные выше, могут не отображаться в псевдониме.
В качестве обходного пути вы можете переключиться на Zsh, что позволяет:
% grep 'alias.*cd' .zshrc
alias cd../..='cd ../..'
alias cd..\\..='cd ../..'
% pwd
/Users/firas
% cd../..
% pwd
/
% cd
% pwd
/Users/firas
% cd..\..
% pwd
/
Вы не можете использовать косые черты в псевдониме. Однако Bash позволяет использовать их в именах функций, поэтому вы можете сделать это функцией:
cd../.. () { cd ../..; }
Вы не можете использовать обратную косую черту в псевдониме или имени функции. Символ обратной косой черты заключает в кавычки следующий символ, поэтому cd..\..
анализируется как cd....
задолго до того, как эта строка будет найдена как имя команды. Если вы хотите вызвать команду с именем cd..\..
нужно набрать cd..\\..
, 'cd..\..'
или что-то эквивалентное. Кроме того, имя команды, которое каким-либо образом указано в кавычках, не учитывается при поиске псевдонима, поэтому вы никогда не сможете использовать псевдоним, содержащий обратную косую черту. Bash также не допускает обратную косую черту в именах функций. поскольку cd..\..
анализируется как cd....
Вы можете определить функцию под названием cd....
(как указано выше).
Если вы используете cd
Команда, вам нужно будет ввести пробел после нее, как и любая другая команда. Но вы можете сохранить набрав, не печатая cd
совсем. Установить autocd
вариант со следующей строкой в ~/.bashrc
:
shopt -s autocd
Затем вы можете ввести имя каталога в командной строке, и "выполнение" этого каталога изменится на него.
~/some/sub/directory$ ../..
~/some$
"Вы не можете использовать косую черту в псевдониме или имени функции "? Это новость для меня. Я годами использовал следующую функцию оболочки в Linux и OS X bash, и у меня никогда не было проблем:
function ../.. { cd ../..; echo "$PWD"; }
Естественно, cd../..
это также хорошее имя функции. Косая черта может использоваться в имени функции оболочки.
Что касается версии с обратной косой чертой, вы не можете встроить ее в псевдоним или имя функции, но вам не нужно: Когда вы печатаете cd..\..
, bash интерпретирует обратную косую черту как escape и пытается выполнить cd....
, Так определите это, и вы сможете делать все, что вы хотели. Добро пожаловать.
function cd.... { cd ../..; }
Если вы хотите сохранить псевдонимы, почему бы просто не сделать:
alias ..='cd ..'
alias ...='cd ../../'
alias ....='cd ../../../'
Или, если вам нужно вернуться назад:
alias .3='cd ../../../'
alias .4='cd ../../../../'
alias .5='cd ../../../../../'
# how far back do you need to go on a normal basis..?
Понятия не имею, насколько хорошо это помогает вам поддерживать умственную синхронизацию с мозгом Windows, но это все еще кажется простым способом. (По крайней мере, для тех из нас, кому повезло, не нужно беспокоиться о том, как все делается в Windows.)