Shell Prompt Causes Problems in vi, rsh, etc.

[Stray prompts can cause trouble for many commands that start a noninteractive shell. This problem may have been fixed in your C shell. The point Chris makes about speeding up your cshrc still applies, though. -JP]

If you set prompt in your cshrc file without carefully checking first whether or not prompt was already set (), many versions of the C shell will cheerfully print prompts into the pipe vi uses to expand glob characters [ filename wildcards (*, ?, []) () and the tilde (~) () -JP ].

When you type :r abc*, vi opens a pipe to the C shell and writes the command echo abc* down the pipe, then reads the response. If the response contains spaces or newlines, vi gets confused. If you set your prompt to (n) in your cshrc [i.e., if you show the history number in parentheses as the prompt-TOR ], vi tends to get:

(1) abc.file (2)

back from the C shell, instead of just abc.file.

The solution is to kludge your cshrc () like this:

if $?prompt 
if ($?prompt) then # things to do for an interactive shell, like: set prompt="(\!) " endif

This works because a noninteractive shell has no initial prompt, while an interactive shell has it set to % .

If you have a large cshrc, this can speed things up quite a bit when programs run other programs with csh -c 'command', if you put all of it inside that test.

- CT in net.unix-wizards on Usenet, 22 April 1984