Python Fabric на FreeBSD не может выполнить двоичный файл

Мой простой Fab-файл не может быть запущен в моей системе FreeBSD:

from fabric.api import run, env
env.shell = '/usr/local/bin/bash'   #Fabric doesn't know where to get bash on BSD correctly

def host_type():
    run('uname')

Сначала я получаю сообщение об ошибке оболочки, которую я могу исправить, указав переменную оболочки, как показано. Но тогда у меня все еще есть ошибка:

/usr/bin/uname: /usr/bin/uname: невозможно выполнить двоичный файл.


person Eaton Emmerich    schedule 09.03.2017    source источник


Ответы (1)


Похоже, согласно справочным страницам bash (1):

Bash — это sh-совместимый интерпретатор командного языка, который выполняет команды, считанные из начального ввода или из файла.

Это означает, что единственный ввод, который мы можем дать bash, — это скрипт или ввод через стандартный канал. Но с опцией -c:

-c Если присутствует параметр -c, то команды считываются из первого не являющегося параметром аргумента command_string,...

Таким образом, решение использовать оболочку с параметром -c выглядит следующим образом:

env.shell = '/usr/local/bin/bash -c'

А дальше работает отлично, не знаю, почему оболочка для фабрики такая странная для юниксовой системы, когда она предназначена для работы на серверах.

person Eaton Emmerich    schedule 09.03.2017
comment
Из docs/FAQ: хотя Fabric написан с учетом 6bash, это не является абсолютным требованием. Поэтому, если вы хотите использовать FreeBSD, которая по умолчанию не использует bash (Пользователи Linux часто с удивлением обнаруживают, что Bash не является оболочкой по умолчанию в FreeBSD. Фактически, Bash не включен в установку по умолчанию.). затем вам нужно соответствующим образом настроить Fabric, как они описаны в FAQ. - person YellowShark; 10.03.2017