do shell scriptコマンドとほぼ等価な、Cocoaの機能を用いたshell script実行のAppleScriptです。
よく「Terminal.app上のshell scriptをそのままdo shell scriptコマンドで実行して動かない」という声を聞きますが、そもそも環境変数が全然違うのでそのまま動くはずがありません。
AppleScriptのdo shell scriptコマンドは、いまのmacOSのセキュリティ向上の流れで行けば確実に近い将来に「デフォルトで実行禁止」「環境設定でオンにしてはじめて実行可能に」という扱いになることでしょう。
Cocoaのshell command呼び出し機能についても同様の制限が加わるかどうかは不明ですが、Cocoa経由でのshell command呼び出しAppleScriptについて調べておきました。
AppleScript名:文字列で与えたシェルコマンドを実行する v2 |
— Created 2016-02-13 by Takaaki Naganoya — 2016 Piyomaru Software –以下を参照: –http://stackoverflow.com/questions/412562/execute-a-terminal-command-from-a-cocoa-app use AppleScript version "2.4" use scripting additions use framework "Foundation" set aRes to (runCommandString("pwd") of me) as string –> "/" set bRes to (runCommandString("cd & ls -la") of me) as string –Lock Screen –runCommandAtPath("/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/CGSession", "-suspend") of me –文字列で与えたシェルコマンドを実行する on runCommandString(commandStr as string) set aPipe to current application’s NSPipe’s pipe() set aTask to current application’s NSTask’s alloc()’s init() aTask’s setLaunchPath:"/bin/sh" aTask’s setArguments:{"-c", current application’s NSString’s stringWithFormat_("%@", commandStr)} –stringWithFormatはASOCに書き換え時の要注意点 aTask’s setStandardOutput:aPipe set aFile to aPipe’s fileHandleForReading() aTask’s |launch|() return current application’s NSString’s alloc()’s initWithData:(aFile’s readDataToEndOfFile()) encoding:(current application’s NSUTF8StringEncoding) end runCommandString –指定したパスのシェルコマンドを実行する(結果などは取得しない) on runCommandAtPath(commandPath as string, anArgument as string) set aTask to current application’s NSTask’s alloc()’s init() aTask’s setLaunchPath:commandPath aTask’s setArguments:(current application’s NSArray’s arrayWithObject:anArgument) aTask’s |launch|() end runCommandAtPath |
More from my site
(Visited 89 times, 1 visits today)