- Mar 07, 2018 To run the script, you can now just run it in the terminal by typing its path. Whenever you want to launch the script in the future, just open the Bash shell and type the path to the script. /myscript.sh (If the script is in the current directory, you can run it with./myscript.sh) How to Work With Windows Files in a Bash Script.
- Oct 30, 2010 However, if I try to run the script by right-clicking on a file, a pop up message says that 'the execute shell script has encountered an error' The 'convert' command works flawlessy from a Terminal.app window, and the enviroment is correctly set-up in this way.
Automating the User Interface
Unfortunately, not every Mac app has scripting support, and those that do may not always have scripting support for every task you want to automate. You can often work around such limitations, however, by writing a user interface script, commonly called a UI or GUI script. A user interface script simulates user interaction, such as mouse clicks and keystrokes, allowing the script to select menu items, push buttons, enter text into text fields, and more.
Shell scripts must be executable files in order to run. You can use the chmod command to indicate that the text file is executable (that is, its contents can be run as a shell script). In the Terminal app on your Mac, use the cd command to move into the directory that contains the file you want to make executable.
Enabling User Interface Scripting
User interface scripting relies upon the OS X accessibility frameworks that provide alternative methods of querying and controlling the interfaces of apps and the system. By default, accessibility control of apps is disabled. For security and privacy reasons, the user must manually enable it on an app-by-app (including script apps) basis.
Launch System Preferences and click Security & Privacy.
Click Accessibility.
Choose an app and click Open.
When running an app that requires accessibility control for the first time, the system prompts you to enable it. See Figure 37-1.
Convert Mac Shell Script To Apprentice
Attempting to run an app that has not been given permission to use accessibility features results in an error. See Figure 37-2.
Note
To run a user interface script in Script Editor, you must enable accessibility for Script Editor.
Admin credentials are required to perform enable user interface scripting.
Targeting an App
User interface scripting terminology is found in the Processes Suite of the System Events scripting dictionary. This suite includes terminology for interacting with most types of user interface elements, including windows, buttons, checkboxes, menus, radio buttons, text fields, and more. In System Events, the process
class represents a running app. Listing 37-1 shows how to target an app using this class.
APPLESCRIPT
Listing 37-1AppleScript: Targeting an app for user interface scriptingtell application 'System Events'
tell process 'Safari'
-- Perform user interface scripting tasks
end tell
end tell
To control the user interface of an app, you must first inspect the app and determine its element hierarchy. This can be done by querying the app. For example, Listing 37-2 asks Safari for a list of menus in the menu bar.
APPLESCRIPT
Listing 37-2AppleScript: Querying an app for user interface element informationtell application 'System Events'
tell process 'Safari'
name of every menu of menu bar 1
end tell
end tell
--> Result: {'Apple', 'Safari', 'File', 'Edit', 'View', 'History', 'Bookmarks', 'Develop', 'Window', 'Help'}
Accessibility Inspector (Figure 37-3) makes it even easier to identify user interface element information. This app is included with Xcode. To use it, open Xcode and select Xcode > Open Developer Tool > Accessibility Inspector.
Once you know how an element fits into an interface, you target it within that hierarchy. For example, button X of window Y of process Z
.
Clicking a Button
Use the click
command to click a button. Listing 37-3 clicks a button in the Safari toolbar to toggle the sidebar between open and closed.
APPLESCRIPT
Listing 37-3AppleScript: Clicking a buttontell application 'System Events'
tell process 'Safari'
tell toolbar of window 1
click (first button where its accessibility description = 'Sidebar')
end tell
end tell
end tell
--> Result: {button 1 of toolbar 1 of window 'AppleScript: Graphic User Interface (GUI) Scripting' of application process 'Safari' of application 'System Events'}
Choosing a Menu Item
Menu items can have a fairly deep hierarchy within the interface of an app. A menu item generally resides within a menu, which resides within a menu bar. In scripting, they must be addressed as such. Listing 37-4 selects the Pin Tab menu item in the Window menu of Safari.
APPLESCRIPT
Listing 37-4AppleScript: Choosing a menu itemtell application 'System Events'
tell process 'Safari'
set frontmost to true
click menu item 'Pin Tab' of menu 'Window' of menu bar 1
end tell
end tell
--> Result: menu item 'Pin Tab' of menu 'Window' of menu bar item 'Window' of menu bar 1 of application process 'Safari' of application 'System Events'
Note
Scripting the user interface of an app can be tedious and repetitious. To streamline the process, consider creating handlers to perform common functions. For example, Listing 37-5 shows a handler that can be used to choose any menu item of any menu in any running app.
APPLESCRIPT
Listing 37-5AppleScript: A handler that chooses a menu itemon chooseMenuItem(theAppName, theMenuName, theMenuItemName)
try
-- Bring the target app to the front
tell application theAppName
activate
end tell
-- Target the app
tell application 'System Events'
tell process theAppName
-- Target the menu bar
tell menu bar 1
-- Target the menu by name
tell menu bar item theMenuName
tell menu theMenuName
-- Click the menu item
click menu item theMenuItemName
end tell
end tell
end tell
end tell
end tell
return true
on error
return false
end try
end chooseMenuItem
Listing 37-6 calls the handler in Listing 37-5 to select the Pin Tab menu item in the Window menu of Safari.
APPLESCRIPT
Convert Mac To Windows Files
Choosing a Submenu Item
Some menus contain other menus. In these cases, it may be necessary to select a menu item in a submenu of a menu. Listing 37-7 demonstrates how this would be done by selecting a submenu item in Safari.
Convert Script To Text
APPLESCRIPT
Listing 37-7AppleScript: Selecting a submenu itemtell application 'System Events'
tell process 'Safari'
set frontmost to true
click menu item 'Email This Page' of menu of menu item 'Share' of menu 'File' of menu bar 1
end tell
end tell
--> Result: {menu item 'Email This Page' of menu 'Share' of menu item 'Share' of menu 'File' of menu bar item 'File' of menu bar 1 of application process 'Safari' of application 'System Events'}
Copyright © 2018 Apple Inc. All rights reserved. Terms of Use | Privacy Policy | Updated: 2016-06-13
Terminal User Guide
Instead of entering commands and waiting for a response, you can compose shell scripts that run without direct interaction.
A shell script is a text file that contains one or more UNIX commands. You run a shell script to perform commands you might otherwise enter at the command line.
Shell scripts are useful because you can combine many common tasks into one script, saving you time and possible errors when performing similar tasks over and over. You can also automate shell scripts using tools such as launchd
or Apple Remote Desktop.
A shell script begins with a character combination that identifies it as a shell script—specifically the characters # and ! (together called a shebang) followed by a reference to the shell the script should be run with. For example, here’s the first line of a shell script that would be run with sh
:
You should document your shell scripts with comments. To add a comment, start the line with the number sign (#). Every line of a comment needs to begin with the number sign:
#This program returns the
#contents of my Home folder
You can put blank lines in a shell script to help visually distinguish different sections of the script.
You use the chmod
tool to indicate that the text file is executable (that is, its contents can run as a program). See Make a file executable in Terminal on Mac.
For information about how to write shell scripts, see the Shell Scripting Primer on the Apple Developer Connection website.