start page | rating of books | rating of authors | reviews | copyrights

UNIX Power Tools

UNIX Power ToolsSearch this book
Previous: 10.6 Avoiding C Shell Alias Loops Chapter 10
Aliases
Next: 10.8 Fix Quoting in csh Aliases with makealias and quote
 

10.7 How to Put if-then-else in a C Shell Alias

The C shell's brain damage ( 47.2 ) keeps you from using an if ( 47.3 ) with an else in an alias. You have to use a sourceable script ( 10.5 ) . Or that's what I thought until I saw an article by Lloyd Zusman on comp.unix.questions in December 1987. He'd saved an earlier posting on that group (but without its author's name) that showed how. The trick: use enough backslashes ( \ ) and the eval ( 8.10 ) command.

As an example, here's an alias named C for compiling ( 52.8 ) C programs. It needs the executable filename (like C prog ), not the source filename (like C prog.c ). If you type a filename ending in .c , it complains and quits. Else, it:

Your alias doesn't need to be as complicated. But this one shows some tricks, like putting an if inside the if , that you might want to use. The expressions like =~ and -e are explained in article 47.4 . Watch your quoting - remember that the shell strips off one level of quoting when you set the alias ( 10.3 ) and another during the first pass of the eval . Follow this example and you'll probably be fine:


# COMPILE AND chmod C PROGRAMS; DON'T USE .c ON END OF FILENAME. alias C 'eval "if (\!* =~ *.c) then \\    echo "C quitting: no .c on end of \!* please." \\ else \\    if (-e \!*) mv \!* \!*.old \\    echo \!*.c SENT TO cc \\    cc -s \!*.c -o \!* \\    if (-e \!*) chmod 311 \!* \\ endif"'

- JP


Previous: 10.6 Avoiding C Shell Alias Loops UNIX Power Tools Next: 10.8 Fix Quoting in csh Aliases with makealias and quote
10.6 Avoiding C Shell Alias Loops Book Index 10.8 Fix Quoting in csh Aliases with makealias and quote

The UNIX CD Bookshelf Navigation The UNIX CD BookshelfUNIX Power ToolsUNIX in a NutshellLearning the vi Editorsed & awkLearning the Korn ShellLearning the UNIX Operating System