Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

unholyrattrap

macrumors newbie
Original poster
Jun 28, 2010
1
0
For the past couple of days I have been constructing a script to automate connecting to switches via terminal. A couple months back i stumbled over the screen command, and its ability to run on serial ports in order to grant console access to Nortel and Cisco switches. I have tried making several different scripts to get this work. First I tried with shell scripting, which worked most of the time. I would however come across the issue where if i did not close the screen correctly i would be left with a detached screen. This was easily enough fixed with unplugging and re-plugging in the usb to serial dongle.

It was at that point that I decided to step it up and try making an automated applescript to auto detect and pass the usb port info to the script and make it so you can unplug and move ports and re-run the script. Essentially making things much more streamlined. However when i run it i am getting:

error number -10004
as well as error
error "Must be connected to a terminal." number 1

Below is the script i have constructed, it is copied verbatim from my script window. Any input on this would be greatly appreciated, as a note this is my first applescript, so if I am doing something nubish, please let me know so I can correct it in the future.


Code:
(*First step in, to find if you know what port your dongle is in*)
display dialog "Would you like to run the Terminal Console Launcher?" buttons {"Yes", "No"}
set theButton1 to button returned of result (*variable call, theButton1*)
if theButton1 = "Yes" then
	--Second Step in
	display dialog "Would you like to run the command to find your device now?" buttons {"Yes", "No"}
	set theButton3 to button returned of result (*Variable call, theButton3*)
	if theButton3 = "Yes" then
		do shell script "whoami > /User.txt" --finds the user name on the machine
		set unixPath1 to "/User.txt" --appoints pathing for the user store
		set openAndRead1 to (open for access (POSIX file unixPath1)) --opens and reads the text
		set user1 to (read openAndRead1 for (get eof openAndRead1)) --reads and sets to user1
		close access openAndRead1 --close the read to text, prevents memory leak
		do shell script "rm /User.txt" --removes the file to pipe in text
		do shell script "echo " & user1 (*debug catcher*)
		do shell script "ls -l /dev/tty.* > /Temp.txt" --pipes command to check dongle name
		set unixPath to "/Temp.txt" --appoints pathing to file for saving
		set openAndRead to (open for access (POSIX file unixPath)) --opens and reas text
		set txt to (read openAndRead for (get eof openAndRead)) --read file, set to txt
		close access openAndRead --closes text read, prevent memory leak
		do shell script "rm /Temp.txt" --removes file created above to pipe in text
		(*return txt*)
		set txt3 to word 44 of txt as string --captures needed info,1st entry
		set txt2 to word 45 of txt as string --captures needed info,2nd entry
		set txt1 to word 46 of txt as string --captures needed info,3rd entry
		do shell script "echo " & txt3 (*debug catcher*)
		set consolePath to "/" & txt3 & "/" & txt2 & "-" & txt1 as string --configures text output
		do shell script "echo " & consolePath (*Debug Catcher*)
		--set user2 to (display dialog "Enter you user name:" default answer "")
		--set password1 to (display dialog "Please enter your sys password:" default answer "")
		(*This is the binding command to launch the temrinal to the switch*)
		tell application "Terminal"
			activate
			do shell script "
			#!/bin/bash
			screen -x " & consolePath & " 9600" 
			--user name "" password "" with administrator privileges
			--sudo screen -s " & consolePath & " 9600"
			--possibly look into calling the new shell call here for force it run?
		end tell
		--screen -R " & consolePath & " 9600" user name user2 password "" with administrator privileges
		--password1
		--do shell script "screen -D -R 3189"
	end if
else (*un-needed garbage collector call to end loop on alternate option call*)
	try (*Garbage collector*)
	on error the error_message number the error_number
		display dialog "Error: " & the error_number & ". " & the error_message buttons {"Cancel"} default button 1
	end try
end if
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.