Lots of users add an
if
(! $?prompt)
exit
test (
2.9
)
to their
.cshrc
files.
It's gotten so common that some vendors add a workaround to defeat the
test.
For instance, some versions of the
which
command (
50.8
)
set the
prompt
variable so that it can see your aliases "hidden"
inside the
$?prompt
test. I've also seen a version of
at
that starts an interactive shell to run jobs.
If you've buried commands after
if
(! $?prompt)
that should only be run
on interactive shells or at login time, then you may have trouble.
There are workarounds.
What you'll need depends on the problem you're trying to work around.
-
The version of
which
on the CD-ROM works without reading your
.cshrc
file, so there's no problem there.
-
Here's a way to stop the standard
which
from reading parts of
your
.cshrc
that you don't want it to read.
The first time you log in, this scheme sets a
CSHRC_READ
environment variable (
6.1
)
.
The variable will be copied into all
subshells (
38.4
)
(like the one that
which
starts).
In subshells, the test
if
($?CSHRC_READ)
will branch to the end of your
.cshrc
file:
if (! $?prompt) goto cshrc_end
# COMMANDS BELOW HERE ARE READ ONLY BY INTERACTIVE SHELLS:
alias foo bar
...
if ($?CSHRC_READ) goto cshrc_end
# COMMANDS BELOW HERE ARE READ ONLY AT LOGIN TIME:
setenv CSHRC_READ yes
...
cshrc_end:
-
If you have a buggy version of
at
(
40.3
)
that runs jobs from interactive
shells, make
your own front-end to
at
(
10.1
)
that sets an environment variable named
AT
temporarily before it
submits the
at
job.
Add a test to your
.cshrc
that quits if
AT
is set:
( )
\at
|
# at JOBS RUN INTERACTIVE SHELLS ON MY BUGGY VERSION OF UNIX.
# WORKAROUND IS HERE AND IN THE at ALIAS BELOW:
if ($?AT) goto cshrc_end
...
alias at '(setenv AT yes; \at \!*)'
...
cshrc_end:
|
Most modern versions of
at
save a copy of your environment and
restore it, later, when the
at
job is run.
At that time, the
AT
environment variable will be set; the C shell will
skip the parts of your
.cshrc
that you want it to.
It's ugly, but it works.
Those workarounds probably won't solve all the problems on your version of
UNIX, but I hope they'll give you some ideas.