Можно ли заставить скрипты использовать псевдонимы вместо команд?


8

У меня есть псевдоним для команды (я настраиваю среду разработки Python)

alias python=~/virtualenv/bin/python

так что я могу бежать ~/virtualenv/bin/python, просто набрав python. Теперь в моем проекте есть сценарий оболочки, который работает, например:

#!/bin/sh
python run-project.py

Могу ли я заставить скрипт использовать мой псевдоним pythonвместо найденного в pythonнем $PATH, без внесения изменений в скрипт?


4
Из интереса, почему вы не можете изменить PATH? Изменение PATH и размещение #!/usr/bin/env pythonв верхней части ваших сценариев Python кажется проще.
Микель

@Mikel Это даже лучше, чем ваш другой ответ. Не могу принимать комментарии, хотя.
phunehehe

Я обновил свой ответ, чтобы включить это предложение.
Микель

Ответы:


7

Да.

Если вы введете свои псевдонимы ~/.aliases, то вы можете сделать

export BASH_ENV="~/.aliases"
somescript

Это предполагает, что ваш скрипт начинается с #!/bin/bash, потому что #!/bin/shон немного менее предсказуем.

Вот что я бы предложил:

  1. Создать ~ / .bashenv
  2. Переместите все настройки, которые вы хотите использовать в скриптах, из ~ / .bashrc в ~ / .bashenv
  3. Добавьте это вверху вашего ~ / .bashrc:
    [ -f ~/.bashenv ] && source ~/.bashenv
  4. Поместите BASH_ENV=~/.bashenvв / etc / environment
  5. Сделайте так, чтобы ваши сценарии начинались, #!/bin/bashесли они этого еще не сделали

Или, если вы используете zsh, просто переместите псевдонимы в ~ / .zshenv. Zsh смотрит в этот файл автоматически.


Но, возможно, проще просто поставить ~/virtualenv/binперед собой PATH, а затем изменить свои сценарии Python, чтобы #!/usr/bin/env pythonв качестве первой строки.


Разве вы не имеете в виду ~/.bashenvна шаге 4?
CJM

Так что мне все равно придется изменить сценарий, с #!/bin/shна #!/bin/bash? Могу я просто сделать bash my-script?
phunehehe

phunehehe: Да, я думаю bash my-script, сработает, если вы все еще будете выполнять шаги 1-4.
Микель

Я не рекомендую использовать псевдонимы в скриптах. Это не сработает, если кто-то другой запустит ваш скрипт, или если вы запустите скрипт под sudoдругим или другим методом повышения привилегий. И это не позволяет вам менять virtualenvисполнение, что было бы главной причиной отсутствия ~/virtualenv/binу вас на PATHпостоянной основе. Добавление каталога перед PATHнужным является лучшим способом.
Жиль "ТАК - перестань быть злым"

4

Предположим, что ваш файл псевдонима " ~ / .bash_aliases ", поместите это в ваш скрипт:

#!/bin/bash
shopt -s expand_aliases
source ~/.bash_aliases
python run-project.py

( через )


0

Кроме того, вы всегда можете использовать sourceсвой сценарий для принудительного использования псевдонимов. Например, давайте предположим , что у вас есть псевдоним из rmв вашем ~/.bashrc:

alias rm='moveToTrash'

в то время moveToTrashкак программа в вашем /usr/bin. Теперь у вас есть скрипт с таким именем test.bash:

#!/bin/bash

which rm

Когда test.bashвыполняется непосредственно, вы можете увидеть вывод /bin/rm, в то время как source test.bashполучите вывод

alias rm='moveToTrash'
    /usr/bin/moveToTrash
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.