Syntaxosacompile [-l language] [-o name] [-e save file as execute only] [-d place the resulting script in the data fork of the output file] [-r type:id place the resulting script in the resource fork of the output file, in the resource specified by type:id] [-t the four-character file-type code for the script (the default is "osas")] [-c the four-character creator code for the script (the default is "ToyS")] [one or more files or standard input] DescriptionThe osacompile program is located in your startup disk:usr:bin directory (or, /usr/bin/ ). You have to call osacompile using the /usr/bin/osacompile syntax. You can provide a filename for the new script by using the optional -o switch, as in: /usr/bin/osacompile -o newscript scripttext.txt. This command-line sequence would attempt to compile the file scripttext.txt, located in the current working directory, into a compiled script called newscript. The Terminal depicted in Figure 34-1 did not provide a new filename, so the new script received the default filename of a.scpt. Type the filenames or paths inside the Terminal window without quotation marks (e.g., /users/bruceper/newscript instead of "/users/bruceper/newscript"). In another example, let's say you want to compile a text file in another directory and save the new file in a folder other than the current working directory. You can use syntax such as: /usr/bin/osacompile -o /users/bruceper/desktop/script2 /users/bruceper/documents/rawscript This command-line sequence takes a text file rawscript located in the documents folder of user bruceper and compiles a new script called script2 in the same user's desktop directory. Are you getting the impression that it is much easier to create and compile scripts inside of a development program like Script Editor? The osacompile command attempts to compile the text file as an AppleScript unless you specify another OSA language with the -1 switch, as in: /usr/bin/osacompile -l JavaScript rawscript.txt (assuming that a JavaScript OSA scripting component exists on the system). Use the osalang command (described later in this chapter) to get information on all of the system's OSA languages. You can specify more than one file argument for osacompile, which will attempt to compile all of the given files into one script. For example, one file could be a collection of subroutines, and the other could be a script that initiates some task by calling those defined routines. You can also pass standard input or typed AppleScript code as opposed to a filename to the osacompile command. The typed standard-input code has to be enclosed in quotation marks (""). For example, the code: /usr/bin/osacompile -o /users/bruceper/documents/script3 "return (2 * 50)" will cause osacompile to create a compiled script called script3 in my documents folder. If you run this script inside Terminal with the osascript command, for instance, the return value of 100 (the value returned from the expression (2 * 50)) will show up in the Terminal window.
ExamplesYou can compile and run the following example from the Terminal command line. It starts with a text file called rawscript.txt, which contains a tell statement that targets the Finder. The script just returns the number of items (count items), such as files and folders, contained by the logged-in user's desktop folder. This text file is compiled into an AppleScript called newscript, which is located in the /users/bruceper/documents/ directory. If you run this script on the command line with input such as usr/bin/osascript newscript (assuming that the current working directory in the Terminal window is /users/bruceper/documents/ ), then the script's integer return value (e.g., 8) will be displayed as standard output on the command line: (* command line input in Terminal window: [localhost: ~] bruceper% /usr/bin/osacompile -o /users/bruceper/ documents/newscript /users/bruceper/library/desktop/rawscript.txt *) (* contents of rawscript.txt *) tell app "Finder" return (count items) end tell (* Example return value in Terminal window: an integer like '8' *) |