Могу ли я использовать 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.)

Другие вопросы по тегам