2017-01-31 8 views
0

Мне было трудно найти подходящий заголовок. Вот что я хотел бы иметь:Функция bash для работы в качестве псевдонима в каталоге исполняемых файлов?

$ some_prefix deploy

Если запустить исполняемый файл с именем deploy в /some/directory/somewhere, где я могу заменить «развернуть» для любого других исполняемого файла в этом каталоге. Я мог добавить /some/directory/somewhere к моему PATH, но некоторые из сценариев имеют общие имена, поэтому я бы назвал их префиксом.

+0

Вы должны иметь возможность использовать скрипт функции или оболочки для выполнения этого. – Kevin

+0

какая ОС вы? (или вы хотите переносное решение?). Я думаю, что в OSX «some_prefix» будет «открытым». – philwalk

+1

Вы всегда можете просто использовать каталог в переменной и сделать что-то вроде '$ some_prefix/deploy'. – Kevin

ответ

2

Я думаю, что вы просто хотите функцию, жесткие-коды путь:

run_it() { 
    "/some/directory/somewhere/$1" "${@:2}" 
} 

Затем вызовите

run_it deploy foo bar baz 

запустить

/some/directory/somewhere/deploy foo bar baz 
+0

yep thats все, что я искал. благодаря! –

+3

Вы должны использовать shift, если вы не хотите запускать '/ some/directory/something/deploy deploy foo bar baz' –

+0

@waltera: или:' "/ some/directory/something/$ @" ':-) – rici

1

сделать функцию или псевдоним под названием setmy , который установит множество псевдонимов на основе списка исполняемых файлов в..
Ваш setmy выполнит alias mydeploy=/some/directory/somewhere/deploy для всех исполняемых файлов.
Далее обратитесь к функции с префиксом my, только пропустить пространство:

mydeploy 
+0

это лучшее решение, чем то, что я собирался для –

0

Вы можете временно переопределить значение PATH, предваряя его определение в команде:

PATH=/some/directory/somewhere:/usr/local/bin:/usr/bin:/bin deploy 

Это может также быть упакованы в псевдоним:

alias some_prefix='PATH=/some/directory/somewhere:$PATH' 

Так что вам нужно только запустить:

some_prefix deploy 

Оболочка (bash, zsh или даже dash), сначала будет расширяться псевдоним

PATH=/some/directory/somewhere:$PATH deploy 

, а затем параметр PATH

PATH=/some/directory/somewhere:/usr/local/bin:/usr/bin:/bin deploy 

перед использованием переопределенной PATH для поиска deploy команда и также передают ее в окружающую среду процесс deploy.


Примечание: Это определение видимости только для следующей команды, не на всю командную строку. Итак, если вы запустите

some_prefix deploy ; deploy 

первого deploy будет искать только в модифицированных PATH, в то время как вторые используют исходное значение PATH.То же самое относится к командам, которые привязаны к |, && или ||. Если это проблема, вы можете взглянуть на this question. Конечно, всегда можно просто использовать псевдоним несколько раз по мере необходимости:

some_prefix deploy; some_prefix deploy 
+0

cool! я бы подумал, что def будет охвачен всей сессией. хороший трюк, чтобы знать. имеет смысл, хотя теперь, когда я думаю об этом. 'export' сделает его сессией в ширину правым? –

+0

@DustMason Не совсем. Если вы просто определяете параметр в командной строке без добавления команды, например. 'NAME =" VALUE "', он уже привязан ко всему сеансу оболочки. 'export NAME' требуется только, если вы хотите сделать его доступным в среде любых последующих внешних команд, запущенных с этого сеанса. 'export NAME =" VALUE "' является просто сокращением, которое объединяет оба. Но команда «NAME =« VALUE »отличается тем, что определяет« NAME »только в среде« command », она никак не влияет на сеанс запущенной оболочки. Кроме того, 'export NAME =" VALUE "команда; command' не будет работать. – Adaephon

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

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