Ich sah mir das Skript an, das calabash-sandbox
ausgeführt wird, und es scheint, dass es eine neue Bash-Sitzung erstellt, komplett mit allen Umgebungsvariablen, die Calabash benötigen. Das entspricht in etwa dem, wenn Sie bash && echo 'test'
in einem Skript ausgeführt haben - Sie werden den echo 'test'
-Teil nicht sehen, bis Sie diese Sitzung beenden.
Aber es gibt eine Vielzahl von Möglichkeiten, Befehle in neue Shell-Sitzungen zu schieben, und eine davon scheint in diesem Fall gut zu funktionieren. Von einem Bash Reference Manual
heftigen Schlag beinhaltet den ‚< < <‘ Umleitungsoperator, so dass eine Zeichenkette als Standardeingabe in einen Befehl verwendet werden.
Dies bedeutet, dass Sie etwas tun können: calabash-sandbox <<< 'echo test'
und es wird Ihre neue Sonder Kalebasse Sitzung öffnen, führen Sie Ihren Befehl in der Zeichenfolge, und die Sitzung beenden.
$ calabash-sandbox <<< 'echo test'
This terminal is now ready to use with Calabash.
To exit, type 'exit'.
test
This terminal is back to normal.
, wenn Sie etwas komplizierter müssen wie ich, können Sie EOF verwenden, um eine mehrzeilige Zeichenfolge auf Ihre neue Sitzung zu umleiten, wie folgt aus:
#!/bin/bash
calabash-sandbox <<EOF
export BUNDLE_ID=com.tabrindle.example
export DEVICE_TARGET=$(system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p' | grep "Serial Number:" | awk -F ": " '{print $2}')
export DEVICE_ENDPOINT=http://gobbledygook.local:37265
export CODE_SIGN_IDENTITY="iPhone Developer: Brindleware LLC (XX8799XB1X)"
echo ""
printenv | grep -E 'BUNDLE_ID|DEVICE_TARGET|CODE_SIGN_IDENTITY|DEVICE_ENDPOINT'
EOF
Welche, genau so, wie man erwarten würde, wird so etwas ausgeben:
$ ./execute_calabash
This terminal is now ready to use with Calabash.
To exit, type 'exit'.
DEVICE_ENDPOINT=http://gobbledygook.local:37265
BUNDLE_ID=com.tabrindle.example
DEVICE_TARGET=34fc6d34c34e23454c234523454580b1e2345b9ef
CODE_SIGN_IDENTITY=iPhone Developer: Brindleware LLC (XX8799XB1X)
This terminal is back to normal.
Dies ist möglicherweise nicht der einzige oder sogar beste Weg, dies zu tun, aber es funktioniert sicherlich.