Object

Shell Class

Used to execute Unix or DOS shell commands under Windows, Mac OS X, or Linux.

Events
Completed
DataAvailable

Properties
ErrorCode
IsRunning
Mode
PID
Result
TimeOut

Methods
Close
Execute
Poll
ReadAll
Write
WriteLine

# Notes

Use the Shell class to execute DOS or Unix commands and get the results. It has a single method, Execute, which executes a one-line command in Synchronous mode. This causes two properties of the Shell object to change: ErrorCode, which is a system-supplied error code or 0 for no error; and Result, which is a String containing the output of the command. The TimeOut property specifies how long (in milliseconds) a process can run before it is automatically terminated. A value of -1 means the process can run indefinitely. This property currently applies only to Windows.

# Examples

Using the synchronous mode, the following code lists the current directory's files (Mac OS X or Linux).

Dim s As Shell
s= New Shell
#if TargetWin32
s.execute "dir"
#elseif ( TargetMacOS or TargetLinux) and Not( TargetMacOSClassic)
s.execute "ls -la"
#else
MsgBox "This doesn't run on Mac OS Classic!"
#endif
If s.errorCode = 0 then
EditField1.text = s.result
else
MsgBox "Error code: " + Str(s.errorCode)
end if

The following example gets the names and values of the environment variables on the user's computer and displays the information in an EditField. You can use the EnvironnmentVariable method of the System object to get or set individual environment variables.

Dim s as New Shell
Dim cmd as String
#if TargetMacOS or TargetLinux and Not( TargetMacOSClassic)
cmd="env"
#elseif TargetWin32
cmd="set"
#endif
s.execute cmd
if s.errorCode=0 then
EditField1.text=s.Result
else
EditField1.text="Error "+ Str(s.ErrorCode)
end if

## Interactive Shells

The following terminal application allows you to submit Unix commands using the interactive mode. The interface consists of two EditFields, InputField, in which the user can enter a command, and OutputField that displays the results.

The Open event for the window initializes the shell object (declared as a property of the window).

mShell = New Shell
mShell.Mode = 2

The user can type a unix command into the EditField, InputField. When he presses Return, the following code in the EditField's KeyDown event runs. The Write method sends the command to the Shell's input buffer.

If Key = Chr(13) Then
If Not mShell.IsRunning Then
mShell.Execute "sh"
End If
mShell.Write InputField.Text
mShell.Write Chr(13)
InputField.Text = ""
Return True
Else
Return False
End If

## '

A Timer calls the ReadAll method in its Action event and displays the output in OutputField:

If mShell <> Nil Then
OutputField.SelText = mShell.ReadAll
End If

# See Also

TargetCarbon, TargetWin32, TargetMacOSClassic, TargetMachO, TargetMacOS, TargetLinux constants.