I detailed the open
command in the last Shell Tricks post, so I thought I’d go over some tricks for doing the opposite next: closing and quitting apps.
The first thing I’ll mention is a shell script from Jon Stovell called quit
. You can download it from his freeware page. It uses AppleScript (with some great logic) to “nicely” quit any application. I’ve mentioned it before, as well as tricks for adding Bash completion to it.
Second, I’ll point out my fk
shell command. The first version was handy, and I made some additions shortly after. I have a new version for you today that incorporates the quit
command.
First, you need the fp
(find processes) command, which gives you a case-insensitive, partial title search for running processes (you can add both of these to your .bash_profile
):
fp () { #find and list processes matching a case-insensitive partial-match string
ps Ao pid,comm|awk '{match($0,/[^\/]+$/); print substr($0,RSTART,RLENGTH)": "$1}'|grep -i $1|grep -v grep
}
And here’s the revised fk
command. Give it part of a process or app name and it will give you a menu of all matches (case-insensitive). Cancel the menu with “q” or enter a number. If the process is a Mac app, it will use quit, otherwise it will kill
the specific process chosen.
Note that you need the quit script in /usr/local/bin (or edit the fk
function to match your own location).
# build a menu of processes matching (case-insensitive, partial) first parameter
# now automatically tries to use the `quit` script if process is a Mac app <http://jon.stovell.info/personal/Software.html>
fk () {
local cmd OPT
IFS=$'\n'
PS3='Kill which process? (q to cancel): '
select OPT in $(fp $1); do
if [[ $OPT =~ [0-9]$ ]]; then
cmd=$(ps -p ${OPT##* } -o command|tail -n 1)
if [[ "$cmd" =~ "Contents/MacOS" ]] && [[ -f /usr/local/bin/quit ]]; then
echo "Quitting ${OPT%%:*}"
cmd=$(echo "$cmd"| sed -E 's/.*\/(.*)\.app\/.*/\1/')
/usr/local/bin/quit -n "$cmd"
else
echo "killing ${OPT%%:*}"
kill ${OPT##* }
fi
fi
break
done
unset IFS
}
Now you have the counterpart(s) to OS X’s open
command. Enjoy!