Modifying the <dot>bashrc or bash startup files.

2010-06-03 20 min read Linux

Find the article <a href="http://blog.infinitered.com/entries/show/4">here.

Copy here:<div class="entrybody">

If you&#8217;ve been learning the <a set="yes" linkindex="8" href="http://en.wikipedia.org/wiki/Command_line_interface" title="Wikipedia Entry: Command line interface">command-line and you have the basics down (you should be, as the most effective way to use a computer is a combination of a GUI and command-line), the next step is to customize your environment.<div class="info_box">

<span class="info_box_title">Beginner&#8217;s Tip: &#8221;command-line&#8221; and &#8221;shell&#8221; are often used synonymously. In unix, technically speaking, the shell is what processes the command-line, but usually, they mean the same thing

The ability to fully customize your <a set="yes" linkindex="9" href="http://en.wikipedia.org/wiki/Unix_shell" title="Wikipedia Entry: Unix Shell (computing)">shell is one of the most powerful things about the command-line. It&#8217;s a dry subject, and mastering it won&#8217;t get you favors from the opposite sex (although it should), but it can be very useful.

There are many ways to customize your shell, but the first one you should learn is modifying your <a linkindex="10" href="http://en.wikipedia.org/wiki/bash" title="Wikipedia Entry: bash">Bash startup files (assuming your shell is Bash, which is the default in OS X, Linux, and many other unices).

When I first learned how to customize bash, I found an overwhelming amount of information and opinion, which made it difficult. This article is intended to give you the fundamental concepts so that you can create your own startup files, and understand how they work. To give you an example, I go through a subset of my own files, section by section.

Let&#8217;s install the example startup files<div class="info_box">

<span class="info_box_title">Beginner&#8217;s Tip: Directory and folder are synonymous. Often folder is used in Windows and OS X and directory is used in Linux, however even Linux represents a directory as a folder graphically

Below are the two example startup files: .bashrc and .bash_profile.

If you would like to use these as your startup files, follow the following directions for your OS.

OS X:

  1. If you want a backup of your existing files, use the following commands (if the files don&#8217;t already exist, you will get an error. The files will be named .bashrc_ORIGINAL and .bash_profile_ORIGINAL in your home folder):<pre class="textmate-source">cp ~/.bashrc ~/.bashrc_ORIGINAL ; cp ~/.bash_profile ~/.bash_profile_ORIGINAL

  2. Copy <a linkindex="11" href="http://www.infinitered.com/settings/dotfiles/osx/.bash_profile">.bash_profile and <a linkindex="12" href="http://www.infinitered.com/settings/dotfiles/osx/.bashrc">.bashrc to your home folder.
    There are a variety of ways to do this, but the simplest is to use the <a linkindex="13" href="http://en.wikipedia.org/wiki/cURL" title="Wikipedia Entry: cURL">curl command:<pre class="textmate-source">curl -o ~/.bash#1 "http://www.infinitered.com/settings/dotfiles/osx/.bash{rc,_profile}"

  3. You do not need to log out, just create a new window or tab in iTerm, or a new window in Terminal.

Linux and other unices:

  1. If you want a backup of your existing files, use the following commands (if the files don&#8217;t already exist, you will get an error. The files will be named .bashrc_ORIGINAL and .bash_profile_ORIGINAL in your home folder):<pre class="textmate-source">cp ~/.bashrc ~/.bashrc_ORIGINAL ; cp ~/.bash_profile ~/.bash_profile_ORIGINAL

  2. Copy <a linkindex="14" href="http://www.infinitered.com/settings/dotfiles/generic/.bash_profile">.bash_profile and <a linkindex="15" href="http://www.infinitered.com/settings/dotfiles/generic/.bashrc">.bashrc to your home directory.
    There are a variety of ways to do this, but the simplest is to use the <a linkindex="16" href="http://en.wikipedia.org/wiki/Wget" title="Wikipedia Entry: Wget">wget (or curl for BSD and others) commands:<pre class="textmate-source">wget -O ~/.bashrc "http://www.infinitered.com/settings/dotfiles/generic/.bashrc"

wget -O ~/.bash\_profile \"http://www.infinitered.com/settings/dotfiles/generic/.bash\_profile\"</pre> 
**or** <pre class=\"textmate-source\">curl -o ~/.bash#1 \"http://www.infinitered.com/settings/dotfiles/generic/.bash{rc,_profile}\"</pre> 
  1. Log out then log back in in order to load .bash_profile. Alternatively, you can do a source ~/.bash_profile to run the files.

What the heck are bash Startup Files?<div class="info_box">

<span class="info_box_title">Beginner&#8217;s Tip: ~ represents your home folder, it is short-hand notation so that you don&#8217;t have to type the whole thing; it is also used when you don&#8217;t know the home folder; for example, my code above works, no matter where your home folder/directory is.

<a linkindex="17" href="http://en.wikipedia.org/wiki/bash" title="Wikipedia Entry: bash">Bash, as well as other <a linkindex="18" href="http://en.wikipedia.org/wiki/Unix_shell" title="Wikipedia Entry: Unix shell">unix shells, have files that run when they start. You can modify these files to set preferences, create aliases and functions (a kind of micro-script), and other such fun.

When you start an interactive shell (log into the console, open terminal/xterm/iTerm, or create a new tab in iTerm) the following files are read and run, in this order:

  1. /etc/profile
  2. /etc/bashrc
  3. ~/.bash_profile
  4. ~/.bashrc (Note: only if you call it in .bash_profile or somewhere else)

When an interactive shell, that is not a login shell, is started (when you call &#8221;bash&#8221; from inside a login shell, or open a new tab in Linux) the following files are read and executed, in this order:

  1. /etc/bashrc
  2. ~/.bashrc<div class="info_box"><span class="info_box_title">Beginner&#8217;s Tip: Normally you can&#8217;t see the . files (files that start with a period) because they are hidden. Depending on your OS, you can simply turn on hidden files. Another option is to open the file in the command-line. Here are a few examples:

In shell: pico .bashrc
In shell: vi .bashrc
In OS X: open .bashrc
In GNOME: gedit .bashrc

/etc/profile and /etc/bashrc are run for all users on the system. Often on your workstation, there is only one user, you. But in systems with more than one user, these files can be used to set generic settings for all users. The files in your home folder, ~/.bashrc and ~/.bash_profile, are only for your particular user (since /etc/bashrc is run before ~/.bashrc, you can override anything in /etc/bashrc by simply setting it again in ~/.bashrc). Normally I only change these, since they are in your home folder, and only you have rights to them, you can change them without worry of affecting anyone else.

When your session starts, these files are run, just as if you typed the commands in yourself. Anything that normally works in the shell works in these files. Since .bash_profile only runs when you first login, you set very little there; the only important thing is your <a linkindex="19" href="http://www.linfo.org/path_env_var.html" title="Path definition">PATH. bashrc is where the meat goes, and will be where you spend all your time.

Comments, export, and aliases, the tools of the trade

The most common commands you use in your .bashrc and .bash_profile files are the following:

Creating your .bash_profile<div style="margin: 0px; padding: 10px 20px 10px 0px; width: 200px; color: gray; float: left;"> <img src="http://blog.amit-agarwal.com/wp-content/uploads/infinitered.com/blog_extras/command_line_fx/kb_control_bw.jpg" alt=" " />

The .bash_profile file runs when you first login. You can put everything in this file, but since it only runs once and doesn&#8217;t run when you start a non-login session, it is best that you put only the bare minimum, and then run the .bashrc file. With this approach, your .bashrc gets run every-time to start a new session, because it is called from .bash_profile on login, and it also gets run by bash automatically when starting a non-login shell.

The first thing to setup is your <a linkindex="21" href="http://www.linfo.org/path_env_var.html" title="Path definition">PATH. A path will already be set by the system, so you don&#8217;t want to overwrite that. You can add to the path like this:<pre class="textmate-source"># Add to original path

export PATH=/foo:/foo/bar:$PATH

The $PATH at the end represents the existing path; in otherwords, you are taking the existing path, whatever that is set to, and adding the paths /foo and /foo/bar to it.

It is a good idea to add your bin directory to your path, if you have it. It&#8217;s a standard place to add all of your scripts. The following lines will add the bin folder in your home folder to the path. The if statement simply checks to make sure it exists first before it adds it. This is safe to use even if there is no bin folder:<pre class="textmate-source">if [ -d ~/bin ]; then

export PATH=:~/bin:$PATH
fi

Next, we will run the .bashrc file. The source command reads and runs another file in the same session you&#8217;re in (the . command does the same thing and is synonymous with source).<pre class="textmate-source">source ~/.bashrc

If you like, you can show a welcome message. This only runs when you first log in. The following is an example welcome message (note the colors, which are set in .bashrc below):<pre class="textmate-source">echo -e "Kernel Information: " `uname -smr`

echo -e "${COLOR_BROWN}`bash –version`"
echo -ne "${COLOR_GRAY}Uptime: "; uptime
echo -ne "${COLOR_GRAY}Server time is: "; date

On my workstation, it displays the following:

Last login: Wed Aug 29 09:55:37 on ttyp1<br />	Welcome to Darwin!<br />	Kernel Information:  Darwin 8.10.1 i386<br />	GNU bash, version 2.05b.0(1)-release (powerpc-apple-darwin8.0)<br />	Copyright (C) 2002 Free Software Foundation, Inc.<br />	Uptime: 10:41  up 47 mins, 3 users, load averages: 0.01 0.02 0.00<br />	Server time is: Sat Sep 29 18:41:12 PDT 2007<br /></pre>   <h2>Now the fun* begins, creating your .bashrc</h2> <p><em>* The word \"fun\" is used for entertainment purposes only. \"Fun\" or any other type of amusement is neither guaranteed nor expressly implied.</em></p>  <p>The .bashrc file is where the meat of your customization goes.</p> 	 <p>Normally it doesn\'t matter in which order various items go, so the way the file is laid out is an individual preference. There are many ways to setup a .bashrc file, and many things you can use it for, there is no \"right\" way; only opinions on which is the right way. </p> 	 <p>In this section I\'m going to go over some of the more common things you would use it for, as well as some things that are less common, but that I personally like. You can include as little or as much as you like in your own file. </p>   <h3><font color=\"blue\">C</font><font color=\"red\">o</font><font color=\"#cccc33\">l</font><font color=\"blue\">o</font><font color=\"green\">r</font><font color=\"red\">s</font><span style=\"font-size: 8px; vertical-align: top; color: darkgray;\">TM</span></h3>  <p>Colors aren\'t the most important thing, truly, however because I use colors throughout the entire file, I need them to be created first.</p>  <p>I\'ll start by turning on colors for misc things, the following set your terminal to be the color variant of xterm,  	turn on colors in <a linkindex=\"22\" href=\"http://en.wikipedia.org/wiki/Grep\" title=\"Wikipedia Entry: Grep\">grep</a>, etc:</p>  <pre class=\"textmate-source\">export TERM=xterm-color<br /><br />export GREP_OPTIONS=\'--color=auto\' GREP_COLOR=\'1;32\'<br /><br />export CLICOLOR=1 <br /></pre>  <p>OS X and BSD - The following command turns on colors in <strong><a linkindex=\"23\" href=\"http://en.wikipedia.org/wiki/Ls\" title=\"Wikipedia Entry: Ls\">ls</a></strong>:</p>  <pre class=\"textmate-source\">alias ls=\'ls -G\'  <br /></pre>  <p>Linux, etc - uses the following to turn on colors in ls. You can specify exactly what color is used for what, which is very nice. See <a set=\"yes\" linkindex=\"24\" href=\"http://www.linux-sxs.org/housekeeping/lscolors.html\">http://www.linux-sxs.org/housekeeping/lscolors.html</a> for more information on setting specific colors:</p>  <pre class=\"textmate-source\">alias ls=\'ls --color=auto\' <br />export LS_COLORS=\'di=1:fi=0:ln=31:pi=5:so=5:bd=5:cd=5:or=31:mi=0:ex=35:*.rb=90\'<br /></pre>  <p>Some standard colors, to make adding colors later in this file, or in scripts, easier:</p>  <pre class=\"textmate-source\">export COLOR_NC=\'\\e[0m\' # No Color<br />export COLOR_WHITE=\'\\e[1;37m\'<br />export COLOR_BLACK=\'\\e[0;30m\'<br />export COLOR_BLUE=\'\\e[0;34m\'<br />export COLOR_LIGHT_BLUE=\'\\e[1;34m\'<br />export COLOR_GREEN=\'\\e[0;32m\'<br />export COLOR_LIGHT_GREEN=\'\\e[1;32m\'<br />export COLOR_CYAN=\'\\e[0;36m\'<br />export COLOR_LIGHT_CYAN=\'\\e[1;36m\'<br />export COLOR_RED=\'\\e[0;31m\'<br />export COLOR_LIGHT_RED=\'\\e[1;31m\'<br />export COLOR_PURPLE=\'\\e[0;35m\'<br />export COLOR_LIGHT_PURPLE=\'\\e[1;35m\'<br />export COLOR_BROWN=\'\\e[0;33m\'<br />export COLOR_YELLOW=\'\\e[1;33m\'<br />export COLOR_GRAY=\'\\e[0;30m\'<br />export COLOR_LIGHT_GRAY=\'\\e[0;37m\'<br />alias colorslist=\"set | egrep \'COLOR_\\w*\'\"  # lists all the colors<br /></pre>  <p>Here is an example of using a color in a script (note, the -e is required):</p> <pre class=\"textmate-source\">echo -e \"The color ${COLOR_GREEN}green${COLOR_NC} is nice.\"		<br /></pre>   <h3>Prompts  ~/bin > </h3>  <div class=\"info_box\"><p><span class=\"info_box_title\">Beginner\'s Tip:</span>  	If you use different systems, a good trick is to check or import your startup files 	<em> (and any other . files you like [. or dot files are hidden files and often used for settings])</em> into a <strong>source code repository</strong>, such as subversion. Then no matter what system you are on, assuming your subversion server is accessible, you can simply \"checkout\" your files with one command. Alternatively, you can store them on your website.</p> 	 	<p>You can also do this with your ~/bin folder so you have your scripts too. It takes only a second to get them, and saves you time configuring the environment.</p> </div>  <p>In the shell, every line begins with the prompt, right before the area you can type into. You can put a variety of different things in your prompt, from simply characters such as <strong>></strong> to your user name, the name of the machine, or a ridiculous number of other things.</p>  <p>Some people\'s prompts are, frankly, silly; do you really need your prompt to say something like this (note, the answer is \"no\")?<br />	<strong>juser@myMachine 1/1/2007 12:31:02 PM - \"Funny quote of the day\" - /home/juser></strong></p>  <p>I make my prompt as simple as possible, normally all you see is <br /><strong>~ ></strong>, which is just the path of the current folder followed by a \">\".</p>  <p>Knowing what user I am logged in as and which machine I\'m on is also useful, but I put that in the window of my terminal (see below). For this very simple prompt, I use the following:</p>  <pre class=\"textmate-source\">export PS1=\"\\[${COLOR_GREEN}\\]\\w > \\[${COLOR_NC}\\]\"<br /></pre>  <p>Since you can setup a .bashrc for each user, I normally set my regular user\'s prompt to be green, and then I change it to red for <a linkindex=\"25\" href=\"http://en.wikipedia.org/wiki/Root_user\" title=\"Wikipedia Entry: Root user\">root</a>.  This gives me a visual reminder that I\'m logged in as root, and to be careful.</p>  <p>The following runs before the prompt and sets the title of the terminal window.   	If you set the window title in the prompt, weird wrapping errors occur on some systems, so this method is superior:</p>  <pre class=\"textmate-source\">export PROMPT_COMMAND=\'echo -ne \"\\033]0;${USER}@${HOSTNAME%%.*} ${PWD}\"; echo -ne \"\\007\"\' 	<br /></pre>  <p><em>Note: PROMPT_COMMAND, used in this way, causes problems when you are using the command-line directly (a non-graphical terminal, such as the system console). Simply disable this in those circumstances. You can also write a little <strong>if</strong> to check for that if you like.</em></p> 	 <p>Here is an alternative prompt, with the user and machine name:</p>  <pre class=\"textmate-source\">export PS1=\"\\[${COLOR_GRAY}\\]\\u@\\h \\[${COLOR_GREEN}\\]\\w > \\[${COLOR_NC}\\]\"  # Primary prompt with user, host, and path <br /></pre>   <p>Now I just set prompts 2 through 4. There is a lot of information on setting prompts, but to cover that would be a whole other article. I wanted to give you just the basics, if you want more in depth information follow this <a linkindex=\"26\" href=\"http://some-site.com/\">link</a>.</p>  <pre class=\"textmate-source\">export PS2=\'> \'    # Secondary prompt<br />export PS3=\'#? \'   # Prompt 3<br />export PS4=\'+\'     # Prompt 4	<br /></pre>   <h3>Navigation</h3>  <p>In the command-line, you have to move around a lot. The following aliases are designed to help you navigate your file system with ease.</p> 	 <p>Here is a very simple and useful way to move back up the directory tree, two dots moves you up one, and three dots moves you up two levels in your path:</p>  <pre class=\"textmate-source\">alias ..=\'cd ..\'<br />alias ...=\'cd .. ; cd ..\'<br /></pre>  <p>A lot of people create a <strong>home alias</strong>, but this isn\'t necessary. <strong>cd</strong> by itself, without any parameters takes you back to your home.</p>  <p>Another tip is to use <strong>cd -</strong> which takes you to the previous folder.</p>  <p>The following is very cool; I got it from this <a linkindex=\"27\" href=\"http://www.macosxhints.com/article.php?story=20020716005123797\" title=\"macosxhints.com - Changing between directories the easy way\">site</a>.   I modified it slightly to make it work a little better:</p>  <pre class=\"textmate-source\">if [ ! -f ~/.dirs ]; then  # if doesn\'t exist, create it<br />	touch ~/.dirs<br />fi<br /><br />alias show=\'cat ~/.dirs\'<br />save (){<br />	command sed \"/!$/d\" ~/.dirs > ~/.dirs1; \\mv ~/.dirs1 ~/.dirs; echo \"$@\"=\"`pwd`\" >> ~/.dirs; source ~/.dirs ; <br />}<br />source ~/.dirs  # Initialization for the above \'save\' facility: source the .sdirs file<br />shopt -s cdable_vars # set the bash option so that no \'</pre>   <h2>All done... finally</h2>  <p>That is a lot of information, and to fully cover everything it could be ten times longer.</p> 	 <p>I hope you found something of use, I got rid of the cruft, and tried to only include truly useful things. There are tons of other things you can do to customize bash, happy bashing.</p>   </div>     <p><strong></strong></p> is required when using the above facility<br /></pre>  <p>It basically allows you to save bookmarks to folders. If you constantly go to a particular directory, you can just set it as a bookmark like so:</p> <pre class=\"textmate-source\">save foo</pre>  <p>This will set the current folder you are in as the bookmark <strong>foo</strong>.  To get back to the folder, just type this:</p> <pre class=\"textmate-source\">cd foo</pre>  <p>You can list your \"bookmarks\" with the show command:</p> <pre class=\"textmate-source\">show<br />foo=\"/Users/joebob/foo\"<br /></pre>  <p>The bookmarks are stored in the <strong>~/dirs</strong> file, so you can edit them there too if you like.</p>   <h3>Editors</h3> <p>If an application, such as Subversion, needs you to edit text. It will often launch an external editor and load the text into it. You can modify which application is launched by setting the EDITOR variable. I\'ve listed various options below depending on your system:</p>  <pre class=\"textmate-source\">#export EDITOR=\'mate -w\'  # OS-X SPECIFIC - TextMate, w is to wait for TextMate window to close<br />#export EDITOR=\'gedit\'  #Linux/gnome<br />#export EDITOR=\'vim\'  #Command line<br />export EDITOR=\'pico\'  #Command line<br /></pre>   <h3>Misc</h3>  <p>Common <a linkindex=\"28\" href=\"http://en.wikipedia.org/wiki/Ls\" title=\"Wikipedia Entry: Ls\">ls</a> commands.  Many people use these.   	<strong>ll</strong> shows the long listing, and <strong>lla</strong> shows the long listing with hidden files:</p>  <pre class=\"textmate-source\">alias ll=\'ls -hl\'<br />alias la=\'ls -a\'<br />alias lla=\'ls -lah\'<br /></pre>  <p>Some very useful settings I like to set:</p>  <pre class=\"textmate-source\">export HISTCONTROL=ignoredups # Ignores dupes in the history<br />shopt -s checkwinsize # After each command, checks the windows size and changes lines and columns<br /><br /># bash completion settings (actually, these are readline settings)<br />bind \"set completion-ignore-case on\" # note: bind is used instead of setting these in .inputrc.  This ignores case in bash completion<br />bind \"set bell-style none\" # No bell, because it\'s damn annoying<br />bind \"set show-all-if-ambiguous On\" # this allows you to automatically show completion without double tab-ing<br /><br /># Turn on advanced bash completion if the file exists (get it here: http://www.caliban.org/bash/index.shtml#completion)<br />if [ -f /etc/bash_completion ]; then<br />    . /etc/bash_completion<br />fi<br /></pre>  <p>Others you may find useful:</p>  <pre class=\"textmate-source\">alias g=\'grep -i\'  #case insensitive grep<br />alias f=\'find . -iname\'<br />alias ducks=\'du -cks * | sort -rn|head -11\' # Lists the size of all the folders and files<br />alias top=\'top -o cpu\'<br />alias systail=\'tail -f /var/log/system.log\'<br /></pre>  <p>Shows the commands you use most, it\'s a cool script I got this from this <a linkindex=\"29\" href=\"http://lifehacker.com/software/how-to/turbocharge-your-terminal-274317.php\">site</a>.  It\'s useful 	to show you what you should create aliases for:</p>  <pre class=\"textmate-source\">alias profileme=\"history | awk \'{print \\$2}\' | awk \'BEGIN{FS=\"|\"}{print \\$1}\' | sort | uniq -c | sort -n | tail -n 20 | sort -nr\"<br /></pre>   <h3>Subversion and Diff</h3>  <p>This section is only useful if you use <a linkindex=\"30\" href=\"http://subversion.tigris.org/\" title=\"subversion.tigris.org\">Subversion</a> and <a linkindex=\"31\" href=\"http://en.wikipedia.org/wiki/Diff\" title=\"Wikipedia Entry: Diff\">diff</a>.  However, it highlights various things you can do with aliases and functions.</p>  <p>The basic concept is to wrap a bunch of commands, giving them a new naming convention.  In this case the command is <strong>svn</strong>, and it has many options, such as 	<strong>svn status</strong>. By wrapping these commands, you can set common parameters that you use all the time. Also since they are aliases, you can use bash completion (set above) to get a nice list of the commands. For the following, if I just type <strong>sv</strong> and tab, I get a list of commands.</p> 	 <p>Some of these aliases simply wrap the original commands, without modifying them. I do this for consistency, and it gives me the opportunity to change them later.</p>  <p>First we set some standard settings for Subversion:</p>  <pre class=\"textmate-source\">export SV_USER=\'juser\' # Change this to your username that you normally use on Subversion (only if it is different from your logged in name)<br />export SVN_EDITOR=\'${EDITOR}\'</pre>  <p>The next alias is interesting, as I\'m basically using it to provide help to myself. Of course if you know subversion well, you don\'t need this, but it may be useful when you\'re first starting out and learning. When you type <strong>svshowcommands</strong>, it prints out a nice colored description of all the commands.  Notice how 	you can have one alias on multiple lines:</p>  <pre class=\"textmate-source\">alias svshowcommands=\"echo -e \'${COLOR_BROWN}Available commands: <br />   ${COLOR_GREEN}sv<br />   ${COLOR_GREEN}sv${COLOR_NC}help<br />   ${COLOR_GREEN}sv${COLOR_NC}import    ${COLOR_GRAY}Example: import ~/projects/my_local_folder http://svn.foo.com/bar<br />   ${COLOR_GREEN}sv${COLOR_NC}checkout  ${COLOR_GRAY}Example: svcheckout http://svn.foo.com/bar<br />   ${COLOR_GREEN}sv${COLOR_NC}status    <br />   ${COLOR_GREEN}sv${COLOR_NC}status${COLOR_GREEN}on${COLOR_NC}server<br />   ${COLOR_GREEN}sv${COLOR_NC}add       ${COLOR_GRAY}Example: svadd your_file<br />   ${COLOR_GREEN}sv${COLOR_NC}add${COLOR_GREEN}all${COLOR_NC}    ${COLOR_GRAY}Note: adds all files not in repository [recursively]<br />   ${COLOR_GREEN}sv${COLOR_NC}delete    ${COLOR_GRAY}Example: svdelete your_file<br />   ${COLOR_GREEN}sv${COLOR_NC}diff      ${COLOR_GRAY}Example: svdiff your_file<br />   ${COLOR_GREEN}sv${COLOR_NC}commit    ${COLOR_GRAY}Example: svcommit<br />   ${COLOR_GREEN}sv${COLOR_NC}update    ${COLOR_GRAY}Example: svupdate<br />   ${COLOR_GREEN}sv${COLOR_NC}get${COLOR_GREEN}info${COLOR_NC}   ${COLOR_GRAY}Example: svgetinfo your_file<br />   ${COLOR_GREEN}sv${COLOR_NC}blame     ${COLOR_GRAY}Example: svblame your_file<br />\'\"</pre>  <p>Here I wrap each command:</p>  <pre class=\"textmate-source\">alias sv=\'svn --username ${SV_USER}\'<br />alias svimport=\'sv import\'<br />alias svcheckout=\'sv checkout\'<br />alias svstatus=\'sv status\'<br />alias svupdate=\'sv update\'<br />alias svstatusonserver=\'sv status --show-updates\' # Show status here and on the server<br />alias svcommit=\'sv commit\'<br />alias svadd=\'svn add\'<br />alias svaddall=\'svn status | grep \"^\\?\" | awk \"{print \\$2}\" | xargs svn add\'<br />alias svdelete=\'sv delete\'<br />alias svhelp=\'svn help\' <br />alias svblame=\'sv blame\'<br />alias svdiff=\'sv diff\'<br /></pre>  <p>You may have noticed I added a few commands too, such as <strong>svaddall</strong>; this isn\'t part of standard Subversion.  This command, for example, adds 	all files that aren\'t already in the repository.</p> 	 <p><strong>OS X specific:</strong> The following alias allows you to use the  	<a set=\"yes\" linkindex=\"32\" href=\"http://en.wikipedia.org/wiki/Apple_Developer_Tools#FileMerge\" title=\"Wikipedia Entry: Apple Developer Tools\">FileMerge</a> OS X app for your diffs.   	You need to create fmdiff and fmresolve, which can be found at this <a linkindex=\"33\" href=\"http://ssel.vub.ac.be/ssel/internal:fmdiff\">site</a>.</p>  <p><em>Note: Use diff for command line diff, use fmdiff for gui diff, and svdiff for subversion diff.</em></p> 	 <pre class=\"textmate-source\">alias svdiff=\'sv diff --diff-cmd fmdiff\' # OS-X SPECIFIC</pre>   <h4>Functions</h4>  <p>Functions deserve their own article. But basically they are used when an alias isn\'t enough. The following is a simple example of a function, it is used to show the both the info and the log of a file in subversion in one command (<strong>svgetinfo</strong>):</p>  <pre class=\"textmate-source\">svgetinfo (){<br />    sv info $@<br />    sv log $@<br />}	<br />

All doneā€¦ finally

That is a lot of information, and to fully cover everything it could be ten times longer.

I hope you found something of use, I got rid of the cruft, and tried to only include truly useful things. There are tons of other things you can do to customize bash, happy bashing.


Technorati Tags: <a class="performancingtags" href="http://technorati.com/tag/bash" rel="tag">bash, <a class="performancingtags" href="http://technorati.com/tag/bashrc" rel="tag">bashrc, <a class="performancingtags" href="http://technorati.com/tag/bash_history" rel="tag">bash_history, <a class="performancingtags" href="http://technorati.com/tag/bash_profile" rel="tag">bash_profile, <a class="performancingtags" href="http://technorati.com/tag/prompt" rel="tag">prompt

comments powered by Disqus