2013-11-18 3 views
13

Я хочу добавить небольшой скрипт в linux PATH, поэтому мне не нужно фактически запускать его там, где он физически размещен на диске.Добавить скрипт bash в путь

Сценарий довольно прост о давая APT-получить доступ через прокси я сделал это так:

#!/bin/bash 
array=([email protected]) 
len=${#array[@]} 
_args=${array[@]:1:$len} 
sudo http_proxy="http://user:[email protected]:port" apt-get $_args 

Тогда я сохранил это как apt-proxy.sh, установите его в + х (CHMOD), и все работает нормально, когда я в каталоге, где находится этот файл.

Мой вопрос: как добавить этот APT-прокси к PATH так что я могу на самом деле назвать это, как будто его там, где реальный APT-получить? [из любого места]

Ищите решения для командной строки, если вы знаете, как это сделать с помощью GUI, это хорошо, но не то, что я ищу.

+2

'sudo ... apt-get" $ {@: 2} "', вероятно, проще и надежнее, чем пытаться построить второй массив. – chepner

+0

В зависимости от ваших потребностей/параметров, указывая «PATH» на скрипт (уже подробно описанный в ответах) или перемещая сценарий в уже существующее местоположение, оба достигнут желаемого результата. Обычно я бросаю скрипт в '/ usr/local/bin'. – Origineil

+0

Спасибо @chepner, я новичок в программировании bash, поэтому я ценю такие предложения, чтобы улучшить свой код. – Mansueli

ответ

20

Попробуйте это:

  • Сохранить сценарий, как apt-proxy (без .sh расширения) в какой-нибудь каталог, как ~/bin.
  • Добавить ~/bin к вашему PATH, набрав export PATH=$PATH:~/bin
  • Если вам это нужно постоянно, добавьте эту последнюю строку в ~/.bashrc. Если вы используете zsh, добавьте его вместо ~/.zshrc.
  • Затем вы можете просто запустить apt-proxy с вашими аргументами, и он будет работать в любом месте.

Обратите внимание, что если вы указали переменную PATH в определенном окне, она не будет обновляться в других экземплярах bash.

+0

Вам не нужно экспортировать 'PATH', поскольку он (скорее всего) уже отмечен как экспортированный. Кроме того, может быть лучше _prepend_ ваши личные пути, а не _append_ их к существующему 'PATH'. –

7

Вы хотите определить, что directory переменной пути, а не фактическим двоичным кодом, например.

PATH=$MYDIR:$PATH 

где MYDIR определяется как папку, содержащую бинарную например,

PATH=/Users/username/bin:$PATH 

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

Обратите внимание, что порядок важен, и PATH оценивается таким образом, что если скрипт, соответствующий вашему имени, находится в более ранней записи в переменной пути, то это тот, который вы выполните. Итак, вы можете назовите свой скрипт как apt-get и поместите его ранее в путь. Я бы этого не сделал, потому что это сбивает с толку. Вместо этого вы можете исследовать псевдонимы оболочки.

Я также отмечаю, что вы говорите, что он отлично работает из вашего текущего каталога. Если вы имеете в виду, что у вас есть текущий каталог на вашем пути (.), тогда это потенциальный риск для безопасности. Кто-то может поместить в каталог какой-то троянский вариант общей утилиты (например, ls), а затем вы получите cd to этот каталог и запустите его непреднамеренно.

+0

Возможно, вам стоит взглянуть на эти два подробных ответа на [unix.stackexchange.com] (http://unix.stackexchange.com/a/26059/73013) и на [superuser.com] (http: // superuser.com/a/183980/95837) –

0

сделать псевдоним исполняемого файла в файле ~/.bash_profile, а затем использовать его из любого места, или вы можете указать каталог, содержащий исполняемые файлы, которые нужно запустить из любого места, и это поможет вам.

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