Is there a way with Applescript to launch multiple tabs in Terminal and execute commands against them?

I have a project that requires me to launch several services in Terminal to run and monitor simultaneously and would like to automate that start-up process.

link|improve this question

75% accept rate
feedback

5 Answers

up vote 1 down vote accepted

One option is to use System Events to send the keystroke necessary to create the new tab, but the limitation is that Assistive Devices in Universal Access must be turned on and adding a sight delay may be necessary.

tell application "System Events" to tell process "Terminal" to keystroke "t" using command down

As far as I can discern from the Terminal script dictionary - you can only retrieve information from tabs but not create new ones as you could with windows (eg. Run do script "clear"

link|improve this answer
feedback

Looks like you can use GUI scripting. (I'd have expected to be able to make new tabs without resorting to GUI scripting, since Terminal's dictionary knows tabs as elements of windows. Apparently broken, though.) As with Chealion's answer, access for assistive devices must be turned on but Apple provides a script that allows you to check that it's on here.

http://www.apple.com/applescript/uiscripting/

Matthew Lambie provides an example of using AppleScript's GUI scripting to create tabs in Terminal.app here:

http://lambie.org/2007/11/03/tabs-in-terminal-using-applescript-on-leopard/

This answer would have been better as a comment to Chealion's answer but I don't have the rep to make comments yet.

link|improve this answer
feedback

I'm not sure how to get the tabs but this will get you multiple windows:

set commands to {"ls", "pwd", "cd /tmp; ls"}

repeat with com in commands
    tell application "Terminal"
    	activate
    	do script with command com
    end tell
end repeat

More

link|improve this answer
feedback

iTerm has good scripting support. AFP 548 has an example that opens multiple ssh sessions in different tabs. [I suspect this will be easier to do and more reliable than GUI scripting.]

link|improve this answer
feedback

I know you asked for Terminal, but really - you should be using iTerm :-)

This is from a script written by a coworker for iTerm:

  #!/bin/sh
  osascript <<-eof
	tell application "iTerm"
		set myterm to (make new terminal)
		tell myterm
			launch session "Default session"
			tell the last session
				set name to "Server"
				write text "cd \"$PROJECT_DIR\""
				write text "script/server"
			end tell

			launch session "Default session"
			tell the last session
				set name to "Console"
				write text "cd \"$PROJECT_DIR\""
				write text "script/console"
			end tell

		end tell
	end tell
eof

It launches a new iTerm-window with multiple tabs, and does some small commands in them (for Rails development).

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.