У меня есть псевдонимы в файле ~/.bash_aliases
на удаленном сервере Ubuntu. Файл загружается стандартным образом из файла ~/.bashrc
, вот так:
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
Этот ~/.bashrc
файл, в свою очередь, загружается (также стандартным образом )из файла ~/.profile
, который выглядит так:
if [ "$BASH" ]; then
if [ -f ~/.bashrc ]; then
source ~/.bashrc
echo ".profile loaded.bashrc"
fi
fi
mesg n
Я обнаружил, что мои псевдонимы недоступны в моих командах ткани, например. когда я делаю это в скрипте ткани:
run("aliased_command")
Я получаю этот вывод:
run: aliased_command
out:.profile loaded.bashrc
out: /bin/bash: aliased_command: command not found
Fatal error: run() encountered an error (return code 127) while executing 'aliased_command'
Теперь мне удалось воспроизвести это за пределами структуры, войдя на сервер с помощью ssh и запустив:
~# /bin/bash -l -c aliased_command
из скорлупы (н.б. /bin/bash -l -c
— значение ткани по умолчанию, см. здесь)Я получаю тот же результат:
.profile loaded.bashrc:
/bin/bash: aliased_command: command not found
После некоторого поиска по связанным темам я где-то прочитал, что псевдонимы не экспортируются для интерактивных оболочек, не являющихся -, и затем мне удалось исправить это, используя/bin/bash -l -c -i
(-i
переводит bash в интерактивный режим ).
Затем я добавил следующее в свой fabfile.py:
env.shell = "/bin/bash -l -c -i"
Теперь я могу использовать псевдонимы в своих командах ткани... просто отлично!
Итак, мои вопросы:
Есть ли проблемы с этим решением? Если да, то что мне делать?
У кого-нибудь еще есть проблема с запуском псевдонимов в их fabfiles?
Есть ли очевидная причина, по которой у меня может быть эта проблема, а у других нет?
Может ли кто-нибудь указать мне ссылки и т. д., которые описывают эту проблему и решение? А также объясните, как они их нашли...:)