답변:
tell application "Terminal"
do script " "
activate
end tell
이상하게 보이지만 터미널이 들어오는 "do script"명령을 처리하는 방식이 이상합니다. 각각에 대해 새 창을 만듭니다. 원하는 경우 실제로 유용한 것으로 바꿀 수 있습니다. 새 창을 연 직후에 원하는 것을 실행합니다.
나는 그것을하는 세 가지 방법을 생각할 수 있습니다 (처음 두 곳은 다른 곳에서 도난 당했지만 어디서 잊어 버렸습니다). 매번 새 창을 열고 싶어하기 때문에 애플 스크립트에서 쉘 스크립트를 호출하는 세 번째 것을 사용합니다.
최소 10.10 이후 OS X에 내장 된 스크립트와 달리,이 모든 것은 파인더 창의 현재 작업 디렉토리 인 디렉토리에 관계없이 터미널을 엽니 다 (즉, 열기 위해 폴더를 선택할 필요가 없습니다).
또한 파인더> 터미널> 파인더 서클을 완성하기위한 몇 가지 bash 함수가 포함되었습니다.
tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal"
if (exists window 1) and not busy of window 1 then
do script "cd " & quoted form of myDir in window 1
else
do script "cd " & quoted form of myDir
end if
activate
end tell
tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal"
if not (exists window 1) then reopen
activate
if busy of window 1 then
tell application "System Events" to keystroke "t" using command down
end if
do script "cd " & quoted form of myDir in window 1
end tell
tell application "Finder"
set myDir to POSIX path of (insertion location as alias)
do shell script "open -a \"Terminal\" " & quoted form of myDir
end tell
이 별칭을 .bash_profile에 추가하십시오.
alias f='open -a Finder ./'
이 함수를 .bash_profile에 추가하십시오.
cdf() {
target=`osascript -e 'tell application "Finder" to if (count of Finder windows) > 0 then get POSIX path of (target of front Finder window as text)'`
if [ "$target" != "" ]; then
cd "$target"; pwd
else
echo 'No Finder window found' >&2
fi
}
위의 답변은 터미널이 이미 실행중인 경우에만 작동합니다. 그렇지 않으면 두 개의 터미널 창이 한 번에 열립니다 . do script
하나는 하나이기 때문입니다 activate
.
다음과 같은 경우 간단한 방법으로 이것을 막을 수 있습니다.
if application "Terminal" is running then
tell application "Terminal"
do script ""
activate
end tell
else
tell application "Terminal"
activate
end tell
end if
보너스:
직접 명령을 실행하려면 키 입력을 통해이 작업을 수행 할 수 있습니다 (매우 우아하지는 않습니다!하지만 작동합니다)
[...]
else
tell application "Terminal"
activate
tell application "System Events" to keystroke "ls -la"
tell application "System Events" to key code 36
end tell
end if