Чи можна використовувати компакт-диск ../ .. як псевдонім?


11

Я паралельно використовую 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 ../..'

Коли я починаю новий баш, я отримую

21:16:26 $ bash
bash: alias: `cd../..': invalid alias name

Як би я створив псевдоніми для cd..\..та cd../..правильно?

cd..\.., Здається, є проблеми з екрануючим символом:

21:39:43 $ cd..\..
bash: cd....: command not found

Це не працює, навіть якщо я визначаю інший псевдонім для cd.....


2
Ви не можете. Команда, псевдонім або ім'я файлу не можуть містити /символу. \ Версія, з іншого боку, має працювати нормально.
fkraiem

@fkraiem: Здається, що у зворотній косої версії проблеми є проблеми з втечею. Оновлено питання.
Томас Веллер

О, справді. Від man bash: Символи /, $, `і = і будь-які метахарактеристики оболонки або цитуючі символи, перелічені вище, не можуть відображатися в псевдонімі.
fkraiem

Блін. Я спробував, man aliasі цього не існувало. Якщо ви дасте це як відповідь, я прийму це.
Томас Веллер

Псевдоніми - це одне, функції оболонок - інше. По-іншому подивіться.
alexis

Відповіді:


10

/і \є серед символів, які не можуть відображатися в імені псевдоніма 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
/

12

Ви не можете використовувати косу рису в псевдонімі. Bash дозволяє їм у назвах функцій, тому ви можете зробити цю функцію:

cd../.. () { cd ../..; }

Ви не можете використовувати косої риски в псевдонімі або назви функції. Символ зворотної косої риски цитує наступного символу, так cd..\..його аналізують cd...., задовго до того, як цей рядок буде шукати як ім'я команди. Якщо ви хочете викликати команду з ім'ям cd..\.., вам потрібно ввести cd..\\.., 'cd..\..'чи чого - то подібного. Крім того, ім'я команди, яке цитується будь-яким способом, не розглядається для пошуку псевдоніму, тому ви ніколи не можете використовувати ім'я псевдоніма, що містить зворотну косу рису Bash також не дозволяє зворотних нахилів у назвах функцій. Оскільки cd..\..проаналізовано як cd...., ви можете визначити функцію, яку називають cd....(як вище).

Якщо ви використовуєте cdкоманду, вам доведеться вводити пробіл після неї, як і будь-яка інша команда. Але ви можете зберегти введення тексту, не ввівши cdзовсім. Встановіть autocdпараметр у наступному рядку ~/.bashrc:

shopt -s autocd

Потім ви можете ввести ім'я каталогів у командному рядку, і «виконати» цей каталог зміниться на нього.

~/some/sub/directory$ ../..
~/some$ 

Якщо я це зроблю shopt, я, мабуть, незабаром пропущу цю функціональність у Windows :-)
Томас Веллер,

Гм, це неправда. Штрихи приймаються в назвах функцій bash.
alexis

@alexis Ага, правда, ти можеш використовувати косої риси в баші. Виправлено, спасибі.
Жил "ТАК - перестань бути злим"

@ThomasW. Звичайно, ви будете. autocdбула однією з причин, коли я перейшов на zsh, ще тоді, коли у bash цього не було. Єдиний гідний спосіб використання Windows - це все-таки встановити Cygwin у комплекті з zsh.
Жил "ТАК - перестань бути злим"

5

"Ви не можете використовувати косу рису в псевдонімі або ім'я функції "? Це для мене новина. Я використовував наступну функцію оболонки протягом багатьох років на Linux і OS X bash, і ніколи не виникав проблем:

function ../.. { cd ../..; echo "$PWD"; }

Природно, cd../..це також чудова назва функції. Нарізка може бути використана у назві функції оболонки.

Що стосується зворотної косої версії, ви не можете вбудовувати її в псевдонім або ім'я функції, але вам не потрібно: Коли ви вводите cd..\.., bash інтерпретує звороту косу рису як біг і намагається виконати отриманий результат cd..... Отже, визначте це, і ви зможете зробити все, що вам було після. Будь ласка.

function cd.... { cd ../..; } 

2

Якщо ви хочете зберегти псевдоніми, чому б просто не зробити:

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.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.