bash -c "workon" return: "Befehl nicht gefunden"

2967
elpddev

Die Verwendung von "workon" in bash führt zu einer Liste von envs.

bash> workon project_1 

Beim Versuch über Bash -c wird ein Fehler zurückgegeben.

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

Edit 1: Weitere Informationen per Kommentar

bash> type workon  workon is a function workon ()  {  virtualenvwrapper_load; workon "$@" } 
2
Es gibt nicht genug Informationen in der Frage. Was ist "workon"? "Typ Workon" sollte es Ihnen sagen. Jakuje vor 8 Jahren 2
@ Jakuje Danke für die Erwähnung von "Typ". Ich habe die Informationen zu der Frage hinzugefügt. elpddev vor 8 Jahren 0

1 Antwort auf die Frage

0
Jakuje

workonist eine Funktion. Die Funktionsdefinition ist für eine Shell lokal und in den Subshells nicht sichtbar (wie bei Variablendefinitionen).

Sie müssen die Funktion exportieren, wenn Sie sie in Subshells sichtbar machen möchten. Von der Handbuchseite für bash:

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

export -p

Die angegebenen Namen werden für den automatischen Export in die Umgebung der nachfolgend ausgeführten Befehle markiert . Wenn die -fOption angegeben ist, beziehen sich die Namen auf Funktionen . Wenn keine Namen angegeben werden oder die -pOption angegeben wird, wird eine Liste mit Namen aller exportierten Variablen gedruckt. Die -nOption bewirkt, dass die Exporteigenschaft von jedem Namen entfernt wird. Wenn auf einen Variablennamen folgt =word, wird der Wert der Variablen auf word gesetzt. exportGibt einen Exit-Status von 0 zurück, sofern keine ungültige Option gefunden wird, einer der Namen kein gültiger Shell-Variablenname ist oder -f mit einem Namen angegeben wird, der keine Funktion ist.

Daher wird die export -f workonFunktionsdefinition Ihre Probleme lösen.