bash -c "workon" return: "команда не найдена"

Использование "workon" в bash приводит к выводу списка в envs.

bash> workon
project_1

При попытке через bash -c возвращается ошибка.

bash> bash -c "workon"
bash: workon: command not found

Редактировать 1: Больше информации по комментарию

bash> type workon

workon is a function
workon () 
{ 
    virtualenvwrapper_load;
    workon "$@"
}

1 ответ

Решение

workon это функция. Определение функции является локальным для оболочки и не отображается в подоболочках (так же, как определения переменных).

Вам нужно экспортировать функцию, если вы хотите, чтобы она была видимой в подоболочках. Из справочной страницы для bash:

export [-fn] [name[=word]] ...

export -p

Предоставленные имена помечаются для автоматического экспорта в среду последующих выполненных команд. Если -fопция дается, имена относятся к функциям. Если имена не указаны или если -p предоставляется опция, выводится список имен всех экспортируемых переменных. -n опция вызывает удаление свойства экспорта из каждого имени. Если за именем переменной следует =word, значение переменной установлено в слово. export возвращает состояние выхода 0, если не обнаружена недопустимая опция, одно из имен не является допустимым именем переменной оболочки, или -f предоставляется с именем, которое не является функцией.

Следовательно export -f workon после определения функции решит ваши проблемы.

Другие вопросы по тегам