2016-08-08 11 views
1

쉘 스크립트를 실행하는 Calabash-sandbox에 액세스하려고합니다. 기본적으로 내 셸 스크립트는 기본적으로 calabash-sandbox와 각 명령을 실행해야합니다쉘 스크립트에서 Calabash-sandbox 사용

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

이 있습니다. 그것은 calabash-sandbox를 실행하고 거기서 멈춘다.

답변

1

나는 calabash-sandbox이 실행되는 스크립트를 살펴 봤는데, 그것은 새로운 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. 

이렇게하는 것이 최선의 방법 일 수도 있지만 실제로는 효과가 있습니다.