2016-08-08 6 views
1

シェルスクリプトを実行しているCalabash-sandboxにアクセスしようとしています。基本的に私のシェルスクリプトは、基本的にcalabash-sandboxとそれぞれのコマンドを実行する必要がありますシェルスクリプトでCalabash-sandboxを有効にする

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

を持っています。それは、かっこ - 砂場を実行し、そこで停止します。

答えて

1

私はcalabash-sandboxが実行されているスクリプトを見て、それは新しいbashセッションを作成するように見えます。新しいbashセッションが作成され、すべての環境変数が必要です。したがって、スクリプトでbash && echo 'test'を実行した場合とほぼ同じです。そのセッションを終了するまで、echo 'test'の部分は表示されません。

しかし、新しいシェルセッションにコマンドをプッシュする方法はたくさんありますが、特にこの場合はうまくいくようです。 Bash Reference Manual

からバッシュコマンドに標準入力として を使用する文字列を可能にする、「< < <」リダイレクト演算子を含みます。

これは、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. 

これは、これを行うための最も簡単な方法ではありませんが、確かに有効です。

関連する問題