Linux for CG – Setting Up The Command Line

The command line (or unix shell) seems like one of the most archaic way possible to interact with a computer file-system. However most animation and vfx studios require that artists know the basics of interacting with the command line.

There are different types of command lines available, two of the more common are bash and tcsh.

Setting up the tcsh prompt

I primarily use tcsh, so I’ll start with setting it up so it’s more user-friendly. When you start using the default command line, it normally looks pretty dull…

Linux ShellI have my shell setup like so…

Linux ShellIt contains a bit more information. It contains my username (will), hostname (will-A8HE), the time and date as well as what directory I’m currently in. I’ve also put the prompt (>) on a new line, this gives me more real estate when dealing with long paths or filenames.

You can control this behaviour by setting up a .cshrc file (also sometimes called .mycshrc). This is a text file which stores information about how you want your shell setup. The first part of my .cshrc looks like this…

# Colors! This makes it easier to edit the colours on the prompt.
set     red="%{\033[1;31m%}"
set   green="%{\033[0;32m%}"
set  yellow="%{\033[1;33m%}"
set    blue="%{\033[1;34m%}"
set magenta="%{\033[1;35m%}"
set    cyan="%{\033[1;36m%}"
set   white="%{\033[0;37m%}"
set     end="%{\033[0m%}" # This is needed at the end... 🙁

set prompt="\n%B${green}`whoami`@`hostname`${white}%b %P %D/%W/%y ${blue}%// \n ${white}> ${end}"

# Clean up after ourselves...
unset red green yellow blue magenta cyan yellow white end

This sets up the prompt and because it’s quite awkward setting up colours, we’ve set some variables to make things easier. The hash (#) is used to add comments to the .cshrc file and get ignored by the shell.

The set prompt line can be broken down as follows..

  • \n Start a newline.
  • %B Make the text bold.
  • ${green} Make the text green.
  • `whoami` List my username.
  • `hostname` List my hostname (computer name).
  • ${white} Make the text white.
  • %b Make the text not-bold.
  • %P Time in 24 hour format.
  • %D Date.
  • %W Month.
  • %y Year.
  • ${blue}
  • %/ The current working directory.
  • \n Start a newline.
  • ${white} Make the text white.
  • ${end} End colour.

 

For a more complete listing of all the ways you can modify the prompt, see this page. Next up a few variables to set how the prompt behaves.

set filec
set autolist set color set colorcat
set nobeep

The first of these (filec) enables filename completion, the second (autolist) lists possible options for filename completion and the third (nobeep) stops the command line beeping at you. If you start typing the name of a file and press tab it either completes the name of the file or lists what options you have available. For example if there is only one file in the current directory which starts with ‘a’ and you press ‘a’ then ‘tab’, it will complete the filename for you – saving you from typing. If you have two filenames starting with ‘a’ like ‘andy’ and ‘andrew’ it will complete ‘and’ and list both filenames, press ‘y’ and ‘tab’ and it’ll complete ‘andy’, press ‘r’ and ‘tab’ and it will complete ‘andrew’.

Aliases

The alias command is a command which can be used to setup custom commands. For example I often setup up commands like ‘myren’ or ‘myscripts’ to quickly jump to my render folders or mel/python scripts folder.

alias ll 'ls -lh --color=auto'
alias lr 'ls -ltrh --color=auto'
alias duho 'du -h --max-depth 1'
alias resource 'source ~/.cshrc'
alias remwhite 'rename "y/ /_/" *'
alias copy 'rsync --progress'
alias mydev 'cd ~/Develop'
alias myren 'cd /prj/$PROJECT/$SHOT/maya/renders'

The first two list the contents of the directory, (ll) lists them in alphabetical order, (lr) lists them in descending time with the most recently modified file at the bottom. (duho) reports back the disk-usage of the current directory. (resource) is used to restart the shell to pick up any changes or new aliases I’ve added. (remwhite) removes whitespaces from any file names in the current directory. (copy) is similar to (cp) in that it’s used to copy files from one place to the other, however rsync gives you a progress meter so you know how long the file is going to take. (mydev) changes the directory to my local Develop directory, while (myren) relies on an environment variable called $PROJECT and $SHOT to be set, this allows me to change to the correct render folder depending on what project and shot I happen to be working on.

Most studios have their own environment variables setup, so you can normally reference those by using the (env) command in the shell to list all the environment variables available. To set up environment variables you can use (setenv), how the env variables are stored is dependant on where you set them. In my .cshrc I have these setup to affect any shell I open.

# Setup env variables for OpenEXR viewers.
setenv EXR_DISPLAY_VIDEO_GAMMA 2.2
setenv CTL_DISPLAY_CHROMATICITIES "red 0.6400 0.3300 green 0.3000 0.6000 blue 0.1500 0.0600 white 0.3127 0.3290"

If you want to just affect the current shell your in, you can type these out or use aliases to set variables.

# Set which project and shot I'm working on.
alias setshot 'setenv PROJECT \!:1; setenv SHOT \!:2;'

(\!:1) and (\!:2) are command lines arguments. Now when I type…

setshot myproj myshot

I now have two env variables called $PROJECT and $SHOT that my (myren) alias can reference.

# So this command...
myren
# Is the same as running...
cd /prj/myproj/myshot/maya/renders

My final .cshrc file looks something like this…

# Colors!
set     red="%{\033[1;31m%}"
set   green="%{\033[0;32m%}"
set  yellow="%{\033[1;33m%}"
set    blue="%{\033[1;34m%}"
set magenta="%{\033[1;35m%}"
set    cyan="%{\033[1;36m%}"
set   white="%{\033[0;37m%}"
set     end="%{\033[0m%}" # This is needed at the end... 🙁

# Set up the prompt...
set prompt="\n%B${green}`whoami`@`hostname -s`${white}%b %P %D/%W/%y ${blue}%// \n ${white}> ${end}"

# Clean up after ourselves...
unset red green yellow blue magenta cyan yellow white end

# Set shell behaviour...
set filec
set autolist set color set colorcat
set nobeep

# Setup aliases...
alias ll 'ls -lh --color=auto'
alias lr 'ls -ltrh --color=auto'
alias duho 'du -h --max-depth 1'
alias resource 'source ~/.cshrc'
alias remwhite 'rename "y/ /_/" *'
alias copy 'rsync --progress'

# Setup environment variables.
setenv EXR_DISPLAY_VIDEO_GAMMA 2.2
setenv CTL_DISPLAY_CHROMATICITIES "red 0.6400 0.3300 green 0.3000 0.6000 blue 0.1500 0.0600 white 0.3127 0.3290"

# Setup alias for which Project and Shot I'm working on.
alias setshot 'setenv PROJECT \!:1; setenv SHOT \!:2;'

Leave a Reply

Your email address will not be published. Required fields are marked *