Jak „źródlić” skrypt powłoki za pomocą bash z zsh?

14

Używam zsh i bardzo mi się podoba, ale dużo pracuję ze źródłem Androida, który ma skrypty kompilacyjne, które wymagają poprawnej oceny bash. Skrypty te należy uzyskać przed kompilacją i zdefiniować zmienne środowiskowe i funkcje powłoki używane podczas kompilacji.

Zsh nie może źródła tych plików, a jeśli spróbuję wydać emulate bashmoją powłokę, przestaje działać z dużą ilością tych błędów za każdym razem, gdy trafiam w spację (używam oh-my-zsh, może to jest przyczyna?):

url-quote-magic:24: bad pattern: ( ):/(|/localhost)/*

Czy jest sposób dla mnie, aby nie przełączać się na bash, aby ocenić te pliki, lub wywołać instancję bash i zaimportować nowe zmienne środowiskowe / funkcje zdefiniowane podczas pobierania do mojej sesji zsh? Czy jestem skazany na przejście na bash za każdym razem, gdy muszę pracować na Androidzie?

EDYCJA : znalazłem odpowiedź na moje własne pytanie. Pozyskanie pliku przy użyciu innej powłoki nie wydaje się możliwe, ale w przypadku awarii plików makr systemu Android ta strona przyniosła poprawkę:

http://nilvec.com/building-cyanogen-from-source/

Zasadniczo po prostu ustawienie unsetopt nomatchspowoduje, że zsh przestanie narzekać na niedopasowane symbole wieloznaczne, co wystarczy, aby skrypty zostały ukończone. Pozostanie jeszcze jeden błąd dotyczący użycia completewewnętrznego polecenia bash w celu dodania możliwości uzupełniania do jednego makra Androida, ale tutaj absolutnie nie jest to krytyczne.

Gnurou
źródło

Odpowiedzi:

4

Możesz umieścić linię poleceń kompilacji w skrypcie bash, który dostarcza skrypty kompilacji przed wykonaniem polecenia kompilacji.

Coś jak

    #!/bin/bash
    . /path/to/environmentscript
    . /path/to/morefunctionsscript

    compile_command

Następnie zamiast wywoływać compile_commandręcznie, po prostu wywołujesz nowy skrypt bash.

Izaak
źródło
To potencjalne rozwiązanie, ale niestety wykonanie skryptów środowiska zajmuje kilka sekund, a polecenie kompilacji jest bardzo zróżnicowane. Dlatego nie mogę polegać na tym codziennie.
Gnurou