我正在尝试访问运行shell脚本的Calabash-sandbox。基本上我的shell脚本有
#!/bin/sh
calabash-sandbox
calabash-android ---
基本上应该运行calabash-sandbox和各自的命令。它执行calabash-sandbox并在那里停止。
答案 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.
这可能不是唯一的,甚至是最好的方法,但它确实有效。