Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 21 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
21
Dung lượng
563,5 KB
Nội dung
Chapter 9: The TC Shell Everything you thought you knew is now wrong In this chapter … • • • • • • • Background Accessing tcsh Startup Files Commonality with bash Standard error Variables Control structures and builtins Background • 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 completion to csh • Not a very good scripting language – bash is much better • Most features in bash are in tcsh, just might have different syntax Shell 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 Accessing 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) Startup Files • Logon shell – /etc/csh.cshrc – /etc/csh.logon – ~/.tcshrc or ~/.cshrc – ~/.login • Non-logon shell – /etc/csh.cshrc – ~/.tcshrc or ~/.cshrc More files • On logout – /etc/csh.logout – ~/.logout • History events loaded from – ~/.history Things 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 tcsh 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 #! tcsh 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 Standard 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 Word 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 Variables • 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 Variables 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” Numeric Variables • The @ builtin lets you work with numeric expressions • Ex @ variable = ( $count + ) / • Caveat – separate each element by a space • Available operators: =, +=, -=, *=, /=, %=, +, -, *, /, % Numeric Variables con’t • To make an array of numeric variables, you actually have to use set set variable = (1 5) • Then use @ to access the array @ variable[2] = More variable goodness • $#variable – displays the number of elements in a variable array • $?variable – displays whether the variable is set (1 for set, for not set) • To read user input into a variable, set the variable to “$& to combine standard error and standard out • So grab standard out