
Ich verwende zsh und bin damit sehr zufrieden, arbeite aber viel mit Android-Quellcode, der Kompilierungsskripte enthält, die Bash erfordern, um korrekt ausgewertet zu werden. Diese Skripte müssen vor der Kompilierung als Quelle verwendet werden und Umgebungsvariablen und Shell-Funktionen definieren, die während der Kompilierung verwendet werden.
Zsh kann diese Dateien nicht als Quelle verwenden und wenn ich versuche, sie auszugeben, emulate bash
funktioniert meine Shell nicht mehr und jedes Mal, wenn ich die Leertaste drücke, werden viele dieser Fehler angezeigt (ich verwende oh-my-zsh, vielleicht ist das eine Ursache?):
url-quote-magic:24: bad pattern: ( ):/(|/localhost)/*
Gibt es eine Möglichkeit für mich, nicht zu Bash zu wechseln, um diese Dateien auszuwerten, oder eine Bash-Instanz aufzurufen und die neuen Umgebungsvariablen/Funktionen, die sie während der Beschaffung definiert hat, in meine Zsh-Sitzung zu importieren? Oder bin ich dazu verdammt, jedes Mal zu Bash zu wechseln, wenn ich an Android arbeiten muss?
BEARBEITEN: habe eine Antwort auf meine eigene Frage gefunden. Das Abrufen einer Datei über eine andere Shell scheint nicht möglich zu sein, aber im Falle des Scheiterns von Android-Makrodateien brachte diese Seite eine Lösung:
http://nilvec.com/building-cyanogen-from-source/
Im Grunde wird zsh durch einfaches Setzen unsetopt nomatch
angewiesen, nicht mehr über nicht übereinstimmende Platzhalter zu klagen. Dies reicht aus, um die Skripte abzuschließen. Es bleibt noch ein Fehler übrig, und zwar bezüglich der Verwendung des complete
internen Bash-Befehls zum Hinzufügen von Vervollständigungsfunktionen zu einem Android-Makro, aber das ist hier absolut nicht kritisch.
Antwort1
Sie könnten Ihre Kompilierungsbefehlszeile in ein Bash-Skript einfügen, das die Kompilierungsskripte vor der Ausführung des Kompilierungsbefehls einbindet.
Etwas wie
#!/bin/bash
. /path/to/environmentscript
. /path/to/morefunctionsscript
compile_command
Anstatt es dann compile_command
manuell aufzurufen, rufen Sie einfach Ihr neues Bash-Skript auf.