bash 스크립트 내에서 AppleScript를 실행하려면 실행 해야하는 명령 목록으로 파일을 호출 할 수 있습니다.
#!/bin/bash
{some commands}
osascript file.scpt
{other commands}
그러나 bash 내에서 순차적으로 실행 해야하는 명령을 실행하려면 어떻게해야합니까?
예를 들면
#!/bin/bash
echo
echo This will open Google Chrome in Kiosk mode
osascript -e "tell application \"Google Chrome\""
osascript -e "activate"
osascript -e "tell application \"System Events\""
osascript -e "key down {command}"
osascript -e "key down {shift}"
osascript -e "keystroke \"f\""
osascript -e "key up {shift}"
osascript -e "key up {command}"
osascript -e "end tell"
echo "Google Chrome is now open in Kiosk Mode"
나는 이것이 매우 널리 퍼진 예라는 것을 알고 있지만, 내가하려는 일을 설명하는 데 효과적입니다. 일반적으로 이러한 명령은 각 명령마다 각기 이스케이프 \
문자 없이 작성됩니다 "
. 나는 또한 그것들을 .scpt
파일 안에 넣을 것이다 .
내가 아는 해결책 #!/usr/bin/osascript
은 bash 대신 사용하여 스크립트를 다시 작성하고 거기에서 나가는 것이지만 혼합 할 수 있기를 원합니다. 스크립트 파일을 테스트하고 해당 파일에 필요한 각 명령을 추가 한 다음 bash 내에서 필요한 스크립트 파일을 실행하는 경우 스크립트 파일을 테스트 할 수 있다는 것을 알았습니다.
파일 중간에 방법을 사용할 수 없으며 shebang
줄과 함께 사용중인 쉘 을 교체 한 다음 필요한 명령을 실행 한 후 다시 바꿀 수 있습니까?
모든 통찰력은 환영 이상의 것입니다.
답변
에 대한 인수 osascript -e
는 개행을 포함 할 수 있습니다.
osascript -e 'set x to "a"
say x'
여러 -e
인수를 지정할 수도 있습니다 .
osascript -e 'set x to "a"' -e 'say x'
당신은 히어 닥을 사용하는 경우 또는 bash
(세 개의 문자 해석 \
, $
및 `
) 사이 <<END
와 END
사이에 있지만 문자 <<'END'
와 END
.
osascript <<'END'
set x to "a"
say x
END
편집하다:
osascript는 heredoc (예 : / dev / stdin에서 입력)으로 작동 할 수 있으므로 스크립트를 전체 파일로 작성하고 올바른 shebang 행을 앞에 추가 할 수 있습니다.
#!/usr/bin/env osascript
set x to "a"
say x
또한 다음 절차를 사용하여 애플 스크립트를 ~ / Applications / .app에 실제 프로그램으로 저장할 수 있습니다 (스크립트 이름 변경).
mkdir -p ~/Applications/<APP_NAME>.app/Contents/MacOS
touch ~/Applications/<APP_NAME>.app/Contents/MacOS/<APP_NAME>
open -A TextEdit ~/Applications/<APP_NAME>.app/Contents/MacOS/<APP_NAME>
… / MacOS /의 스크립트 파일과 일치하는 파일이 있는지 확인하십시오.
답변
원시 AppleScript를 다음과 같이 감쌀 수 있습니다. 입력 <<EOD
의 마지막 EOD
신호는 라인의 첫 번째 위치에 있어야합니다.
(BTW, 귀하의 사과가 end tell
나중에 누락 된 것 같습니다 activate
….)
#!/bin/bash
osascript <<EOD
tell application "Google Chrome"
activate
end tell
tell application "System Events"
key down {command}
key down {shift}
keystroke "f"
key up {shift}
key up {command}
end tell
EOD
echo "Google Chrome is now open in Kiosk Mode"