Chapter 9:The TC Shell Everything you thought you knew is now wrong... • TC Shell - an expansion of the C Shell from BSD • The ‘T’ comes from TENEX and TOPS-20 OSes • Meant to add featu
Trang 1Chapter 9:
The TC Shell
Everything you thought you
knew is now wrong
Trang 3• TC Shell - an expansion of the C Shell from BSD
• The ‘T’ comes from TENEX and TOPS-20 OSes
• Meant to add features such as command
Trang 4Shell Scripting Caveat
• Recall that we can specify which shell to use for a script by starting the first line with
#!/path_to_shell
• Without this line, tcsh will use sh to execute the script unless you run the script with tcsh explicitly
• Different than bash and other shells
• Even tcsh admits it’s not great
Trang 5Accessing tcsh
• Easiest way is to just issue tcsh
• Want to change your login shell to tcsh?
– chsh
• Exiting tcsh
– exit
– logout (only if login shell)
– CTRL-D (if ignoreeof not set)
Trang 8Things in common with bash
• Command line expansion
– Called substitution in tcsh docs
• History
– history builtin works the same
– ! history references work the same
– Instead of HISTSIZE and HISTFILESIZE, tcsh uses history and savehist
– If variable histlit is set, history shows literal commands before command line substitution
Trang 9tcsh vs bash con’t
• Aliases
– Syntax: alias name “value”
– Allows you to reference command line
arguments using \!* or \!:n
– Special aliases
• beepcmd – instead of bell
• cwdcmd – whenever you change directories
• periodic – a periodic command to run (tperiod)
• precmd – runs just before shell prompt
• shell – absolute path to use for scripts w/o #!
Trang 10tcsh vs bash con’t
• Job control
– Almost identical, slightly different for multiple
processes spawned at once
• Filename substitution
– *, ?, [], {}, ~ all the same
– ~+,~- not available
• Directory stack – same
• Command Substitution $() – NOT available
– Use `command` instead
Trang 11Standard Error
• tcsh doesn’t have an easy way to capture
standard error like bash (i.e 2> )
• Instead we have to use >& to combine
standard error and standard out
• So grab standard out first, then combine out and error to capture error
• Ex:
(cat x y > results) >& errors
Trang 12Word Completion
• Tab completion is similar in tcsh
• Start with an ambiguous reference then hit tab
• If there are multiple matches, it will maximize the length of the prefix
• Will *not* show a list of possible matches
unless you press CTRL-D
Trang 13• In tcsh, there are two scopes, local and global
• To declare a local variable, use:
set variable = value
– Note the spaces – different than bash
• To declare a local integer variable:
@ variable = value
• To declare a global (avail to child procs):
setenv variable value
Trang 14Variables con’t
• Just like bash, use a $ to reference a
variable’s contents (also ${ } )
• unset, unsetenv removes variables
• To declare an array of strings:
set variable = ( values … )
• To reference single entries use [] operator (base 1)
echo variable[2]
set variable[4] = “Value”
Trang 16Numeric Variables con’t
• To make an array of numeric variables, you actually have to use set
set variable = (1 2 3 4 5)
• Then use @ to access the array
@ variable[2] = 2
Trang 17More variable goodness
• $#variable – displays the number of
elements in a variable array
• $?variable – displays whether the variable
is set (1 for set, 0 for not set)
• To read user input into a variable, set the
variable to “$<“
– E.g in a script
• echo –n “Enter a value:”
set usr_input = “$<“
Trang 18Important Shell Variables
• autologout – set timeout period
• cwd – contains current working directory
• histfile – contains location of history
• history – how many history items to keep
• home – your home directory
• mail – where your mail is stored
• owd – previous (old) working directory
Trang 19Shell Variables, con’t
• histlit – show literal commands in history
• ignoreeof – ignore CTRL-D
• nobeep – disables shell beeps
• noglob – turns of file globbing
• rmstar – prompt for rm * commands
• visiblebell – causes screen to flash for bells
Trang 20Shell Variables, con’t
• argv – array of command line args
– $n , $*
– Use $#argv to get number of args
Trang 21• bindkey
• Control structures