osascript
을 사용하는 쉘 스크립트가 있는데, osascript
은 쉘 스크립트를 호출하고 원래 쉘 스크립트에서 설정 한 변수를 전달합니다. 그 변수를 어떻게 AppleScript에서 쉘 스크립트로 전달할 지 모르겠습니다.쉘 스크립트에서 애플 스크립트로 변수를 전달하십시오.
셸 스크립트에서 셸 스크립트에 대한 AppleScript로 변수를 전달하는 방법은 무엇입니까?
내가 이해가되지 않으면 알려주세요.
i=0
for line in $(system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p' | grep "Serial Number:" | awk -F ": " '{print $2}'); do
UDID=${line}
echo $UDID
#i=$(($i+1))
sleep 1
osascript -e 'tell application "Terminal" to activate' \
-e 'tell application "System Events" to tell process "Terminal" to keystroke "t" using command down' \
-e 'tell application "Terminal" to do script "cd '$current_dir'" in selected tab of the front window' \
-e 'tell application "Terminal" to do script "./script.sh ip_address '${#UDID}' &" in selected tab of the front window'
done
이것은 좋은 조언이 아닙니다. 불필요하게 서투른 것 말고는 삽입 된 텍스트를 위생적으로 만들지 않으므로 견고하지도 안전하지도 않습니다. 'text = 'Bob이 "hello"'라고 말하면, AS는 이스케이프되지 않은 따옴표로 인해 구문 오류를 발생시킵니다. Lauri Ranta가 말했듯이, 명시 적으로 'run' 핸들러를 정의하고 문자열을 ARGV를 통해 전달하는 더 좋은 해결책이 존재한다면 절대 코드 분할을 사용하지 마십시오. 자세한 내용은 http://stackoverflow.com/questions/16966117/bash-combining-variables-to-form-a-command-sent-to-applescript-using-the-osascr/16977401#16977401을 참조하십시오. – foo
@foo 당신이 맞습니다.'on run argv'는 "more"가 맞습니다. 내 것은 _ 완벽한 솔루션이 아니지만, 문제없이 여러 번 나 자신을 많이 사용했지만, 간단하고 많은 스크립트에서 사용할 수 있습니다 ... – jm666
당신의 _buggy_ 솔루션입니다. $ text에 큰 따옴표 또는 백 슬래시 문자가 포함되어 있으면 AS 코드가 오류가 발생하거나 의도하지 않은 방식으로 작동합니다. 코드 이동을 사용해야하는 경우 입력 내용을 반드시 소실해야합니다. 예 : 누군가가이 결함을 지적 할 때 "나를 위해 효과가있는"이유가 무엇인지 이해하기위한 Google의 "SQL 주입 공격"은 적절한 대응이 아닙니다. – foo