Add custom commands to the Mac OS X Terminal
When I use my Mac and type away in the Terminal, I’ve felt the need to add custom commands; e.g. launch an application with that folder/file as a parameter.
The way to accomplish this is to create a hidden file in your user folder (i.e. Users/robertnyman) named .profile
(you use the dot before the name to create a hidden file in Mac OS X). In that file, you just simply add your commands. Here’s an example where I’ve added three commands to launch Preview, Photoshop and Firefox respectively with the current folder/a file as the input parameter:
prev(){
open -a /Applications/Preview.app/ "$1"
}
ps(){
open -a /Applications/Adobe\ Photoshop\ CS/Adobe\ Photoshop\ CS.app/ "$1"
}
ff(){
open -a /Applications/Firefox.app/ "$1"
}
One of the power features with the code above is that when the prev
command is called for a folder, it will open all images in that folder and its sub-folders in the same Preview window. So, happy customizing of commands! π
Bonus code: case-insensitive auto-completion
When you press the Tab key in Terminal, you auto-complete the current word you’re typing (according to available commands/files). However, this is case-sensitive, which is a bit of an annoyance since many default folders in Mac OS X are named with upper-case starting letters, such as Desktop, Pictures, Movies etc. But, come to the rescue, a simple command to run in the Terminal to make it case-insensitive:
echo "set completion-ignore-case On" >> ~/.inputrc
Tip: remember to close the Terminal window and restart it before you try it.
No need to restart the terminal. Just do a
<code>source ~/.inputrc</code>
to apply changes made in the file. π
Great hint. Loved it!
You can do even better an put a function more or less like this
runapp() {
$app=`find /Applications/ -name "*.app" | grep $1`;
shift;
open -a "$app/" "$2";
}
and you can invoke any application you know part of the name with a command like
$ runapp photoshop .
Just need some clash detection, case tha part of the name you typed appears more than once, like
$ runapp adobe .
(Sorry if my code is poor or doesn't work rightaway, I'm at work where I only have windoze at hand and I can't test it.)
That sounds very interesting, Robert!
I should really take some time to get familiar with the Terminal/UNIX. It looks like it's worth it π
Fredrik,
Ah, thanks! π
Guilherme,
Well, yes, but that's too much typing for my taste. π
Harmen,
It's definitely worth it! π
Just FYI, you can run <code>open -a Firefox</code> in a terminal; you don't need to specify a full path or the .app extension.
Brian,
Yes, absolutely, that goes for most apps. But what you miss out on then is the ability to pass a file as a parameter (unless you write a longer statement).
In linux this is done by setting up aliases and google says it hasn't changed for OSX… Terminal Alias Shortcuts.
Aldrik,
As I understand it, it's about the same approach, and that you need to add that as well to a <code>.profile</code> or <code>.bash_profile</code> file.
Robert,
Indeed, it's just a bit cleaner. Plus you can add arguments to existing commands.
Thank you!
I am still learning to use the amazing and powerful TERMINAL π
Alexandre
Alexandre,
Me too, me too. π
Thanks for this. Much appreciated.
I’m a new Mac-user and am still getting the hang of it. I’ve been using both Linux and Windows and I am really liking the combination of both in Mac.
Say, wouldn’t you know of a way to merge directories under Mac?
kamasheto,
Thanks! Off the top of my head, I don’t know how to do that.
sorry to sound like a n00b, but how do you add a command? Is it just a .txt file or is there something else that you have to do. Either way great article
Colin,
A hidden file that doesn't really have any type, i.e. just a name that starts with a dot (.). You can trea a hidden gile in the Terminal directly by writing <code>touch .myfile</code>, and then open it up with the editor you prefer.
Nice tips mate, used both, especially the capital one, Im gonna try to add it to my linux box as well.. thnx!
somone,
Glad it was of use to you!
[…] Weitere Beispiele hier […]
A .profile already exists on my computer. Hmmm….
Jon,
Nothing to worry about, it could have been created by an application or some process.
terminalcodes.blogspot.com is also an awesome site for terminal codes. check it out!!!!!! [:
Matt,
Great, thanks for the tip!