我正在尝试访问运行 shell 脚本的 Calabash-sandbox。基本上我的shell脚本有
#!/bin/sh
calabash-sandbox
calabash-android ---
基本上应该运行 calabash-sandbox 和相应的命令。它执行 calabash-sandbox 并停在那里。
我正在尝试访问运行 shell 脚本的 Calabash-sandbox。基本上我的shell脚本有
#!/bin/sh
calabash-sandbox
calabash-android ---
基本上应该运行 calabash-sandbox 和相应的命令。它执行 calabash-sandbox 并停在那里。
我查看了calabash-sandbox
运行的脚本,它似乎创建了一个新的 bash 会话,并包含了葫芦所需的所有环境变量。因此,这大致相当于您在脚本中运行- 在退出该会话之前您bash && echo 'test'
不会看到该部分。echo 'test'
但是,有多种方法可以将命令推送到新的 shell 会话中,其中一种似乎特别适用于这种情况。来自Bash 参考手册
Bash 包含 '<<<' 重定向运算符,允许将字符串用作命令的标准输入。
这意味着你可以做这样的事情:calabash-sandbox <<< 'echo test'
它会打开你新的特殊葫芦会话,在字符串中执行你的命令,然后退出会话。
$ calabash-sandbox <<< 'echo test'
This terminal is now ready to use with Calabash.
To exit, type 'exit'.
test
This terminal is back to normal.
如果您需要像我一样更复杂的东西,您可以使用 EOF 将多行字符串重定向到您的新会话,如下所示:
#!/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
正如您所期望的那样,它将输出如下内容:
$ ./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.
这可能不是唯一的,甚至不是最好的方法,但它确实有效。