在Shell脚本中启用Calabash-sandbox

时间:2016-08-08 10:23:34

标签: xamarin calabash calabash-android xamarin-test-cloud

我正在尝试访问运行shell脚本的Calabash-sandbox。基本上我的shell脚本有

#!/bin/sh
calabash-sandbox 
calabash-android ---

基本上应该运行calabash-sandbox和各自的命令。它执行calabash-sandbox并在那里停止。

1 个答案:

答案 0 :(得分:1)

我看了calabash-sandbox运行的脚本,似乎它创建了一个新的bash会话,完成了calabash需要的所有环境变量。因此,这大致等同于您在脚本中运行bash && echo 'test' - 在退出该会话之前,您将看不到echo 'test'部分。

但是,有很多方法可以将命令推送到新的shell会话中,特别是对于这种情况,其中一种方法似乎很有效。来自Bash Reference Manual

  

Bash包含'<<<<<<<<<<<<<<<<   用作命令的标准输入。

这意味着您可以执行以下操作:calabash-sandbox <<< 'echo test'它将打开您的新特殊calabash会话,在字符串中执行您的命令,然后退出会话。

$ 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.

这可能不是唯一的,甚至是最好的方法,但它确实有效。