1

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

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

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

4

1 回答 1

1

我查看了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.

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

于 2016-11-15T18:56:34.237 回答