2016-07-25 11 views
0

Я определил несколько псевдонимов для папки, которую я часто использую; напримерЕсть ли «начинается с» псевдонимов в ZSH?

alias x="cd /home/username/git/github/user/project" 

Так набрав x в терминале непосредственно принимает меня в папке проекта.

Я думал, что было бы неплохо определить псевдоним, который также используется, если строка начинается только с псевдонима; например если я определил

starts-with-alias x="cd /home/username/git/github/user/project" 

печатая

x/abc 

бы меня:

/home/username/git/github/user/project/abc 
+2

Возможно, вы захотите рассмотреть 'setopt autocd' и' cdpath + = (/ home/username/git/github/user) ', что должно позволить' project' самостоятельно переключаться в каталог с тем же именем в вашем '.../github/user'. – chepner

ответ

1

Использование стандартных функций оболочки, вы могли бы сделать что-то вроде

x() { cd /home/username/git/github/user/project/"$1"; } 

x бы молодежь ere, и x abc доставит вас до /home/username/git/github/user/project/abc.

Не совсем то, что вы просили, но очень близко.

Отказ от ответственности: Испытано только под номером bash; стандартный синтаксис может меняться, а также номер zsh.

1

Я бы предложил использовать Static Named Directories вместо псевдонимов, возможно, в сочетании с опциями AUTO_CD and/or CDABLE_VARS.

Статические названные каталоги обозначаются ~ следовали имя (который мой содержать любой алфавитно-цифровой символ, _, - или .). Обычно они используются для домашних каталогов пользователей в системе, то есть ~someuser будет заменен фактическим домашним каталогом пользователя someuser.

В zsh вы можете также определить свой собственный статические Названный директорий с одним из следующих двух способов:

  • определить параметр оболочки со значением, которое начинается с /:

    x=/home/username/git/github/user/project 
    
  • или используйте команду hash с параметром -d (работает аналогично псевдониму):

    hash -d x=/home/username/git/github/user/project 
    

Единственное различие между этими двумя методами, что первый один (очевидно) обеспечивает параметр оболочки, который вы могли бы использовать в тех случаях, когда названные каталоги не расширены (например, внутри цитируемых строк) или экспортировать в качестве переменной среды. При использовании любого метода, теперь вы можете получить доступ к каталогу /home/username/git/github/user/project с именем ~x:

% cd ~x 
% pwd 
/home/username/git/github/user/project 

Он также работает в качестве первого компонента пути:

% cd ~x/abc 
% pwd 
/home/username/git/github/user/project/abc 

И как дополнительное преимущество по сравнению с псевдонимами его также работает с другими командами, чем просто cd:

% touch ~x/somefile 
% echo foobar > ~x/somefile 
% cat ~x/somefile 
foobar 

С опцией AUTO_CD включена, zsh автоматически перейдет в каталог, если он выдается на месте команды:

% setopt autocd 
% ~x 
% pwd 
/home/username/git/github/user/project 
% ~x/abc 
% pwd 
/home/username/git/github/user/project/abc 

С опцией CDABLE_VARS включена, если аргумент команды cd (или подразумеваемый cd с включенным AUTO_CD) не является каталогом и не начинается с /, zsh, попытается расширить аргумент, как если бы он начинался с ~:

% setopt cdablevars 
% cd x 
% pwd 
/home/username/git/github/user/project 
% cd x/abc 
% pwd 
/home/username/git/github/user/project/abc 

С обоими, AUTO_CD и CDABLE_VARS, Вы можете с помощью названные каталоги так же, как псевдонимы cd с дополнительными преимуществами, которые вы можете получить доступ непосредственно подкаталоги.

% setopt autocd cdablevars 
% x 
% pwd 
/home/username/git/github/user/project 
% x/abc 
% pwd 
/home/username/git/github/user/project/abc 

Примечание: Когда не используется с именем каталога, в контексте cd (либо явно или неявно с помощью AUTO_CD) имя должно предшествовать ~ для того, чтобы быть расширен:

% echo x/abc 
x/abc 
% echo ~x/abc 
/home/username/git/github/user/project/abc 

 Смежные вопросы

  • Нет связанных вопросов^_^