2017-03-09 7 views
0

Meine einfache Fab-Datei kann nicht auf mein FreeBSD-System ausgeführt werden:Python Fabric auf FreeBSD kann nicht ausgeführt werden 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') 

Zuerst habe ich über die Shell erhalten einen Fehler, welche ich durch die Angabe der Shell-Variablen, wie gezeigt beheben können. Aber dann habe ich immer noch den Fehler:

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

Antwort

1

Es scheint, wie nach den man-Seiten von bash (1):

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

die einzige Eingabe Bedeutung wir bash geben kann, ist ein Skript oder Eingabe über ein stdin Rohr. Aber mit der -c Option:

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

So ist die Lösung die Schale mit dem -c Option zu benutzen, ist wie folgt:

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

Und dann funktioniert perfekt, I don‘ Ich weiß, warum die Shell für Fabric für ein Unix-System so seltsam ist, wenn es auf Servern funktionieren soll.

+1

Aus dem [docs/FAQS] (http://docs.fabfile.org/en/1.6/faq.html#my-remote-system-doesn-t-have-bash-installed-by-default-do -i-need-to-install-bash): "Obwohl Fabric mit 6Bash geschrieben wurde, ist dies keine absolute Voraussetzung." Also, wenn Sie FreeBSD verwenden wollen, das standardmäßig keine bash verwendet (["Linux-Benutzer sind oft überrascht, dass Bash nicht die Standard-Shell in FreeBSD ist. Tatsächlich ist Bash nicht in der Standardinstallation enthalten."] (https://www.freebsd.org/doc/en/articles/linux-users/shells.html)). dann müssen Sie Fabric entsprechend konfigurieren, wie in den FAQ beschrieben. – YellowShark

Verwandte Themen