Як встановити псевдонім на основі каталогу?


18

Припустимо, у вас є псевдонім go, але хочете, щоб він робив різні речі в різних каталогах?

В одному каталозі він повинен працювати cmd1, а в іншому - він повинен працюватиcmd2

До речі, у мене вже є псевдоніми для перемикання у вищевказані каталоги, тож чи можна додати goприсвоєння псевдоніма до fooпсевдоніму?

alias "foo=cd /path/to/foo"

Робота в bash (?) На OSX.


1
Це те, для чого складаються файли.
itsbruce

Відповіді:


16

Не зовсім впевнене, про що ви запитуєте, але псевдонім просто розширюється до того, що є у псевдонімі. Якщо у вас є два псевдоніми, ви можете додавати різні команди, навіть псевдоніми.

alias "foo=cd /path/to/foo; go"
alias "foo2=cd /path/to/foo2; go"

У будь-якій іншій ситуації ви можете вказати функцію у своїй .bashrc

function go ()
{
    if [ "$PWD" == "/path/to/foo" ]; then
       cmd1
    elif [ "$PWD" == "/path/to/go" ]; then
       cmd2
    fi;
}

Якщо у вас є більше варіантів, ви можете краще використовувати структуру справ.


4

Я відчуваю, що ви дуже "орієнтовані на каталоги", і, у такому випадку, це може краще відповідати вашому менталітету.

(Якщо чесно, я думаю, що це взагалі погана ідея, ви хочете, щоб команди були глобальними.)

В .bashrc, поставити alias go="./.cmd"(тоді source ~/.bashrc).

Потім у кожен подібний каталог помістіть скрипт під назвою .cmd, а chmod +x .cmdпотім просто goзробіть свою справу.


2
Це велика робота ... ось випадок використання: Під час запуску тестів я хочу псевдонім rspec-all для виконання певних тестів. Але які тести залежать від проекту. І це визначається каталогом.
B Сім

2
Як я бачу, у вас є два варіанти: або використовувати одну функцію (наприклад, @Bernhard, описану вище), і відділення залежно від каталогу (так само, як він сказав), або, ви можете помістити параметри в каталоги. Подумайте про це, це не повинні бути сценарії, ви можете просто поставити файл ( touch .TESTNO; echo 2 > .TESTNO) у кожен каталог, а потім у своїй функції шукати цей файл та розгалужувати відповідно до тестового номера файлу .TESTNO містить. Хоча це зовсім не складно, ви, мабуть, не можете використовувати псевдонім для цього; ви повинні використовувати функцію.
Емануель Берг

2

Я працюю над проектом, який реалізує саме це. Перевірте це: локалалії .

Ось демонстрація:

введіть тут опис зображення

Досить смішно, я фактично використовував goяк приклад у демонстрації. Я не показував каталоги комутації (щось, що я повинен змінити щодо демонстрації), але функції з laкомандою дійсно локальні для каталогу, в якому вони визначені.


1
function go() {
  if [ ! -e "./.cmd1" ]
    then command go -a $1
    else command go -b $1
  fi
}

Аналогічна річ, але якщо припустити, що "go" - це команда, яку ви бажаєте відрізняти від функціональності в певному каталозі.


1

Якщо додати наступну функцію у вашій .bashrc

function cd () { 
  builtin cd "$@" && [[ -f .aliases ]] && . .aliases
  return 0
}

Кожен раз, коли ви перейдете до каталогу з файлом .aliases, він отримуватиме джерело.

Будьте уважні до безпеки, якщо інші можуть створювати файли на вашій машині.

За допомогою цього трюку псевдоніни ніколи не знімаються, але ви можете написати стільки коду, скільки вам подобається у функції.

Ондір використовує цю хитрість і має тонну дзвіночків.

http://swapoff.org/ondir.html#download


Хоча я думаю, що це розумно, але здається, що це небезпечно, оскільки він покладається на це .bashrc. ( cronНаприклад, це не буде працювати ).
ctbrown

Я не впевнений, що в системі Bashrc є щось небезпечне. Я вважаю, що це стандартне / правильне місце для псевдонімів. Саме в природі середовищ вони різні. Дайте питання, що інше середовище - це те, що потрібно. Ніщо не завадить вам знайти користувачів .bashrc в cron, якщо ви хочете, щоб у cron було подібне середовище. NB Cron завжди слід очікувати, що він буде по-різному поводитися з інтерактивною оболонкою завдяки використанню шрифтів та чуб.
текнопаул

Щоправда, у самому bashrc немає нічого небезпечного. Проблема полягає в тому, що у вас немає способу гарантувати, що процес, який змінюється в каталозі, буде джерелом bashrc. Це одне, якщо це ваша інтерактивна сесія. Зовсім інше, якщо цей каталог поділяється між користувачами та процесами, які можуть або не можуть використовувати оболонку bash. .bash_aliases є кращим місцем для bash псевдонімів у деяких системах.
ctbrown
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.