Skip to main content

System Interaction with SenseTalk

These commands and functions let your SenseTalk script interact with the system where the script is running, launch other programs, open files in other programs, or run system commands through the UNIX shell.

Open Command

Behavior: Starts another program, or opens a file with another program on the machine where your script is running. The most common use of this command is to open a file generated by the script, such as opening a text file in a text editor, or a tab-delimited file in a spreadsheet program, so the user can make further changes to it, print it out, etc. If the requested application is already running on the machine where the script is executing, it will be brought to the front, otherwise it will be launched.

open application
open file with application


open "iTunes" -- launch iTunes on this machine


open "/tmp/myFile" with "TextEdit"

Note: To open a file for reading or writing its contents within a script, use the open file command.

Shell Command and Function

Behavior: Runs a command in the command-line shell on the local machine and returns the output.

shell command {, optionalParameters}

As a function:
shell( command {, optionalParameters} )

You can include optional named parameters as a property list at the end of parameters, including:

  • includeErrors: Causes the standard error stream to be included in the output if set to True;
  • notify: an object to notify when the shell task has completed (defaults to ‘me’ if not given and a message is specified);
  • message: Message to send to the notify object when the task completes (defaults to "ShellDone" if not specified);
  • command: The command to execute (this allows a single property list parameter to be used).

If notify or message is specified, the shell command/function returns immediately and the script proceeds. When the shell task finishes, the notification message will be sent to the notify object. The notification message includes 3 parameters: the output, the exit status, and the input command (in order to distinguish between different callbacks). If the script run completes before the task has finished, the result is undefined.

If multiple shell calls are made asynchronously, the resulting callback order might be different than the order in which the calls were made. A faster-running command might complete before a slower command that was called earlier.


shell "rm /tmp/testfile"


log shell(command:command, includeErrors:YES)


put shell("cd /; ls -l") into rootDirectoryList


get shell(command:theCmd, includeStderr:YES)
shell "grep -i 'foo' */*", notify:me, message:"grepComplete"


put shell(includeErrors:YES, command:theCMD)

There is a Windows operating system limitation when running shell commands. When you run a shell command on Windows, you won't see any output from the shell command. To resolve this issue, redirect the output of the command by piping the output to a file. After the script completes, manually read the file contents to see the result.

shell "c:\windows\system32\cmd.exe", <</c "C:\Program Files (x86)\adt-bundle-windows-x86_64\sdk\platform-tools\adb" >> && MyCommand && "> someFile.txt"
put file "C:\wherever\someFile.txt"

Tech Talk

The shell command and function both set the result to the exit code of the command that ran. Typically the exit code is 0 when a command runs successfully and some other value when there is a problem, but the exact meaning of the exit code depends on the command that was run.

The command runs on the machine where the script is running. To run a shell command on another machine, you can use one of the shell commands that provides remote access, such as rsh or ssh.

You can control the default shell application by using the shellCommand global property. For complete information about the initial default shells for each platform as well as how you can change the setting, see the shellCommand.