Псевдоним двух разных версий одной и той же программы в Linux? - PullRequest
2 голосов
/ 21 марта 2012

У меня на компьютере установлена ​​старая версия программы.Эта программа недавно была обновлена ​​до версии.Для запуска моей старой программы я набрал «runProgram».Путь к сценарию выполнения моей программы был указан в моей переменной PATH как

PATH = ....:/path/to/my/old/programs/bin

Я хочу запустить новую версию этой же программы вместе со своей старой программой, и то, как я думал об этом, былоизменив мою переменную PATH следующим образом:

PATH = ....:/path/to/my/old/programs/bin:/path/to/my/new/programs/bin

Что я хочу добиться, так это каким-то образом псевдоним этих двух путей, чтобы при вводе «runVersion1» выполнялась предыдущая версия, а при вводе «runVersion2», новая версия выполнена?

Есть ли способ добиться этого?

Спасибо

Ответы [ 3 ]

5 голосов
/ 21 марта 2012

Если программа сама запускает другие программы из каталога bin, то при запуске программы версии 1 вы хотите убедиться, что каталог версии 1 находится в ПУТИ перед каталогом версии 2, и наоборот, когда вы запускаетепрограмма версии 2.Это то, с чем я имею дело все время, и я имею дело с этим, гарантируя, что PATH установлен правильно.

В моем $ HOME / bin я бы поместил два сценария:

RunVersion1

 export PATH=/path/to/my/old/programs/bin:$PATH
 # Set other environment variables as needed
 exec runProgram "$@"

RunVersion2

 export PATH=/path/to/my/new/programs/bin:$PATH
 # Set other environment variables as needed
 exec runProgram "$@"

Этот метод размещения сценариев оболочки в моем PATH перед другими программами позволяет мне выбирать, какие программы я запускаю.

Полуобобщенная версия

Часто я использую одну программу для настройки среды, а затем связываю ее с различными именами программ, с которыми я хочу работать.Затем он просматривает $0 и выполняет следующее:

 export PATH=/path/to/my/new/programs/bin:$PATH
 # Set other environment variables as needed
 exec $(basename $0 2) "$@"

Если этот сценарий связан с RunProgram2, команда basename отсекает 2 с конца RunProgram2 и затем выполняет RunProgram из более поздней директории.

Я также использовал этот общий метод для доступа к 32-битной и 64-битной версиям программного обеспечения на одной машине.Программы, с которыми я имею дело, обычно имеют более сложную среду, чем просто параметр $ PATH, поэтому сценарии больше.

Одно из основных преимуществ сценариев в $ HOME / bin по сравнению с псевдонимами и тому подобное заключается в том, чтоне имеет значения, с какой оболочкой я застрял;это работает так же.Кроме того, у меня не так много мест, где можно найти, где определен псевдоним (потому что он не определен).

2 голосов
/ 21 марта 2012

Я бы поместил два определения псевдонима в ваш ~ / .bashrc (в зависимости от того, какую оболочку вы используете).

alias runVersion1='/path/to/my/old/programs/bin/program'
alias runVersion2='/path/to/my/new/programs/bin/program'

После редактирования этого файла вам нужно перерегистрировать или просто выполнить

. ~/.bashrc
1 голос
/ 21 марта 2012

То, как вы предлагаете с $PATH, не будет делать то, что вы хотите.Один из возможных способов:

Учитывая, что обычно /usr/local/bin находится в $PATH, и это стандартное расположение для "локальных двоичных файлов", вы делаете следующее:

sudo ln -s /path/to/my/old/programs/bin/myprogram /usr/local/bin/runVersion1
sudo ln -s /path/to/my/new/programs/bin/myprogram /usr/local/bin/runVersion2

В качестве альтернативы, если вы не хотите, чтобы он был общесистемным (то есть вместо этого, только для вашего пользователя), вы можете:

ln -s /path/to/my/old/programs/bin/myprogram $HOME/bin/runVersion1
ln -s /path/to/my/new/programs/bin/myprogram $HOME/bin/runVersion2

(при условии, что $HOME/bin находится в вашем $PATH)

Теперь это не обязательно обязательно исправит вашу проблему - может использовать немного больше информации в вопросе, НО это должно помочь вам продвинуться дальше в том, что вы пытаетесь сделать.

...