Annotation of 43BSDTahoe/new/help/src/cshell/aliases, revision 1.1.1.1

1.1       root        1: .TI CSHELL/ALIASES
                      2: Renaming and Abbreviating Commands [DRAFT]
                      3: 
                      4: 
                      5: Aliases provide a means of setting up a name of your choosing
                      6: to refer to a command or sequence of commands.
                      7: When you use that name as if it were a command,
                      8: the C shell replaces it with the command sequence to which it refers.
                      9: Aliases effectively allow you to abbreviate commands
                     10: and to alter the meaning of existing commands,
                     11: although only from your point of view.
                     12: 
                     13: You set up an alias with the alias command
                     14: 
                     15:        \fBalias\fP \fIname\fP \fItext\fP
                     16: 
                     17: where \fIname\fP is the name you choose and \fItext\fP
                     18: is the replacing text of the command or commands to which
                     19: \fIname\fP will refer.
                     20: For example, the aliases
                     21: .IP
                     22: .nf
                     23: % alias pe printenv
                     24: % alias nr nroff -ms -Tdtc -s1
                     25: .LP
                     26: would cause the shell to replace your subsequent command "pe"
                     27: with "printenv" before executing it, and similarly for "nr".
                     28: The actual replacements are shown below for two sample commands.
                     29: The first command is what causes the shell to print the result
                     30: of the replacement just before executing it.
                     31: .IP
                     32: .nf
                     33: % set echo
                     34: % pe TERM
                     35: printenv TERM
                     36: % nr chap1 chap2 > out
                     37: nroff -ms -Tdtc -s1 chap1 chap2 > out
                     38: .LP
                     39: Notice that when you use an alias, whatever you entered on the rest
                     40: of the line stays on the end after the replacement.
                     41: This will not be the case when special alias arguments are used,
                     42: but that is explained later.
                     43: 
                     44: One of the trickiest parts about aliases is quoting.
                     45: For instance the quotes in
                     46: .IP
                     47: % alias doit 'tbl chap1 chap2 | nroff -ms -Tlpr | lpr'
                     48: .LP
                     49: are needed because without them the shell would have
                     50: perceived three command instead of one.
                     51: The following alias lists the files on the hypothetical
                     52: gumball machine after printing the name of the remote directory first;
                     53: it has more subtle quoting problems:
                     54: .IP
                     55: % alias rlist 'rsh gumball "echo $cwd ; ls" | more'
                     56: .LP
                     57: The outermost quotes achieve the same effect as in the
                     58: previous example, and they have to differ from the
                     59: inner quotes to be interpreted correctly.
                     60: Unfortunately, the variable $cwd will always be replaced with
                     61: the current directory on the local machine because the
                     62: C shell insists on doing variable
                     63: substitution within enclosing " marks.
                     64: Thus even inverting the use of " and ' above would not work.
                     65: Several acceptable ways are
                     66: .IP
                     67: .nf
                     68: % alias rlist "rsh gumball 'echo" '$cwd' "; ls' | more"
                     69: % alias rlist 'rsh gumball echo \\$cwd \\; ls | more'
                     70: % alias rlist rsh gumball echo \\\\\\$cwd \\\\\\; ls \\| more'
                     71: .LP
                     72: and no one can say which one is best.
                     73: 
                     74: Since it is possible to choose an alias name that is currently
                     75: the name of a normal system command, you can effectively replace or
                     76: remove a system command.
                     77: For example,
                     78: .IP
                     79: .nf
                     80: % alias rm echo Sorry, cannot remove
                     81: % rm thesis
                     82: Sorry, cannot remove thesis
                     83: % alias troff /usr/old/troff
                     84: .LP
                     85: You may want to know the aliases currently in effect,
                     86: and can always find out by entering the alias command with
                     87: no argument.
                     88: If you enter it with one argument, the shell prints the
                     89: the replacing text for the argument, if any.
                     90: 
                     91: There is also room for deviant or whimsical uses of aliases.
                     92: .IP
                     93: .nf
                     94: % alias why echo BECAUSE
                     95: % why
                     96: BECAUSE
                     97: % alias vi x
                     98: % alias x y
                     99: % alias y echo Bus error -- core dumped
                    100: % vi myfile
                    101: Bus error -- core dumped myfile
                    102: % alias a alias
                    103: % a
                    104: a      alias
                    105: vi     x
                    106: why    (echo BECAUSE)
                    107: x      y
                    108: y      (echo Bus error -- core dumped)
                    109: .LP
                    110: Aliases can also work like simple, fast shell scripts with arguments;
                    111: simple because only one-line commands work, and fast because 
                    112: no new process is involved and no extra file has to be accessed
                    113: (as with the source command).
                    114: Unfortunately, the mechanism for accessing arguments
                    115: involves complicated history-like
                    116: substitutions and difficult quoting problems.
                    117: 
                    118: When you use an alias, any arguments you give to it
                    119: are usually tacked on to the end of the replacing text when
                    120: the shell does the replacement.
                    121: This practice is suspended completely if your replacing
                    122: text contains what appear to be history substitutions.
                    123: Instead, the C shell selectively places the arguments
                    124: into the replacing text based on the history constructs
                    125: you used to define the alias.
                    126: 
                    127: Here is how it works.
                    128: When the shell replaces the command you typed in with the text
                    129: of the alias, it treats your original command as if it were the
                    130: very last command.
                    131: Thus, for example, !$ inside the definition
                    132: of your alias would be replaced by the last argument with which
                    133: the alias was invoked.
                    134: In the alias
                    135: .IP
                    136: .nf
                    137: % alias whois 'grep \\!:1 /etc/passwd \\!:2*'
                    138: % set echo
                    139: % whois fred > junk
                    140: grep fred /etc/passwd > junk
                    141: .LP
                    142: the \\!:1 designates the first argument and \\!:2* designates
                    143: all the rest.
                    144: Remember that nothing but \\ will quote !.
                    145: Here is an alias which lets you do arithmetic in the C shell:
                    146: .IP
                    147: .nf
                    148: % alias val '@ z = (\\!*) ; echo $z'
                    149: % val 3 - 2 * 6
                    150: -9
                    151: .LP
                    152: Although aliases have many interesting properties,
                    153: you may find them difficult to use and easy to get along without.
                    154: On that note, here are some aliases that might appear
                    155: in a real .cshrc file, which can set up aliases for you
                    156: automatically when you login.
                    157: 
                    158: .nf
                    159: alias h history -r +20
                    160: alias j jobs -l
                    161: alias m more
                    162: alias q exit
                    163: alias z suspend
                    164: set whoami = `hostname | sed s/ucb//`
                    165: alias cd 'chdir \\!* ; set prompt = "$whoami $cwd:t % "'
                    166: cd
                    167: alias la 'set q=$whoami ; if (\\!$ != la) set q=\\!$ ; ruptime | fgrep $q'
                    168: alias ll ls -l
                    169: alias lld ls -ld
                    170: alias pd 'pushd \\!:* ; set prompt = "$whoami $cwd:t % "'
                    171: alias pe printenv
                    172: alias so source
                    173: alias ts 'set noglob ; eval `tset -s \\!*`';
                    174: alias pop 'popd \\!:* ; set prompt = "$whoami $cwd:t % "'
                    175: alias grab 'sed "/^From: .*\\!:1/,/^From/\\\\!d" /usr/spool/mail/jak \\!:2*'
                    176: alias whois 'grep \\!:1 /etc/passwd \\!:2*'
                    177: alias alarm 'set mail = (5 \\!* $mail)'
                    178: alias hic 'if ($i == $whoami) continue ; echo $i'
                    179: alias ismail '@ q = 1 + (-z /usr/spool/mail/\\!^) + (-e /usr/spool/mail/\\!^) ; \\
                    180:                set s = ("No mail file" Yep Nope) ; echo $s[$q]'
                    181: alias slpr "sed 's/^/          /' \\!* | lpr"
                    182: alias val "echo 'scale=5 ; \\!*:x' | bc"
                    183: alias Troff troff -Q -Tcat
                    184: alias Vroff troff -Q -Tversatec
                    185: alias Iroff troff -Q -T6670
                    186: 
                    187: 
                    188: jak

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.