2017-03-09 1 views
0

Mon fichier simple Fab ne peut pas être exécuté sur mon système FreeBSD:Python tissu sur FreeBSD ne peut pas exécuter Binary

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') 

Tout d'abord je reçois une erreur sur le shell, wich je peux fixer en spécifiant la variable shell comme indiqué. Mais j'ai encore l'erreur:

/usr/bin/uname: /usr/bin/uname: cannot execute binary file.

Répondre

1

Il semble que selon les pages de manuel de bash (1):

Bash is an sh-compatible command language interpreter that executes commands read from the start input or from a file.

Signification la seule entrée que nous pouvons donner bash est un script ou d'entrée via un tuyau stdin. Mais avec l'option -c :

-c If the -c option is present, then commands are read from the first non-option argument command_string,...

Donc, la solution est d'utiliser le shell avec l'option -c est la suivante:

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

Et fonctionne alors parfaitement, je ne » Je ne sais pas pourquoi le shell pour le tissu est si étrange pour un système Unix lorsqu'il est destiné à fonctionner sur des serveurs.

+1

De la [docs/FAQS] (http://docs.fabfile.org/fr/1.6/faq.html#my-remote-system-doesn-t-have-bash-installed-by-default-do -i-need-to-install-bash): "Alors que Fabric est écrit avec 6bash à l'esprit, ce n'est pas une exigence absolue." Donc si vous voulez utiliser FreeBSD, qui n'utilise pas bash par défaut (["Les utilisateurs de Linux sont souvent surpris de trouver que Bash n'est pas le shell par défaut dans FreeBSD. En fait, Bash n'est pas inclus dans l'installation par défaut."] (https://www.freebsd.org/doc/en/articles/linux-users/shells.html)). Ensuite, vous devez configurer Fabric en conséquence, comme ils le décrivent dans la FAQ. – YellowShark