Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!ames!ucsd!sdcsvax!trantor.harris-atd.com!x102c!bbadger From: bbadger@x102c.harris-atd.com (Badger BA 64810) Newsgroups: comp.unix.questions Subject: Re: UNIX prompts (-ksh) Message-ID: <1785@trantor.harris-atd.com> Date: 27 Mar 89 17:29:56 GMT References: <18805@adm.BRL.MIL> <11080@well.UUCP> <2391@buengc.BU.EDU> <4549@vpk4.UUCP> Sender: news@trantor.harris-atd.com Reply-To: hjespers@attcan.UUCP (Hans Jespersen) Organization: Harris GISD, Melbourne, FL Lines: 83 In article <4549@vpk4.UUCP> hjespers@attcan.UUCP (Hans Jespersen) writes: >In article <2391@buengc.BU.EDU> bph@buengc.bu.edu (Blair P. Houghton) writes: >>In article <11080@well.UUCP> tneff@well.UUCP (Tom Neff) writes: >>>Actually not even the classic Korn shell solution of >>> >>> export PS1='$PWD> ' >>> >>>seems to work everywhere. > >>I don't know ksh, but all the other shells I've seen use single-quotes >>to protect against variable substitution... > >Absolutely correct. I think Tom ment > > export PS1=`$PWD> ` > ^ ^ [.signature deleted] The original is correct: >>> export PS1='$PWD> ' Note single quotes:^ ^ The ``correction'' is incorrect: > export PS1=`$PWD> ` Note back-quotes: ^ ^ The reason for using single quotes is to prevent the shell from evaluating $PWD at the time of defining exported variable PS1. What *should* happen then is that the string value of PS1 is subject to parameter substitution *at the time the prompt is printed*. In that case the *current* value of PWD can be substituted. I gather from your experience that not all implementations of ksh work the same way. Perhaps another variable must be set to trigger evaluation of the prompt? This is sometimes done to retain compatibility with older shell scripts. If the ``special variable'' is not set, then the older compatible features are used. (I'm not saying it *is* so, just that this is a possibility. Versions of csh I've used have this feature for 'lineeditmode' and 'filec', for instance.) The documentation I have for ksh variable PS1 states: PS1 The value of this parameter is expanded for parameter substitution to define the primary promt string which by default is ``$''. The character ! in the primary prompt string is replaced by the *command* number (See Command Re-entry below). There doesn't seem to be any doubt here that export PS1='$PWD> ' should execute correctly, giving the present working directory set by the cd command. Maybe you have an impoverished version of ksh? Maybe you're really running sh? I seem to have the same problem with the 'tcsh' I'm running, none of the recently posted strings such as: set prompt="%m: (%h)" have worked for me. I just get the literal string. My tcsh does do command line editing, file name completion and inline history completion, but the prompt string doesn't seem to do any prompt-time substitutions. By the way, in .cshrc I use this: if (! $?prompt) exit #not an interactive subshell? set prompt_="`uname -n`>" set prompt="`tput smso`${prompt_}`tput rmso` " if ($?WINDOW_ME || $?DISPLAY ) then set ti_ts="`tput ts`" #to status line set ti_fs="`tput fs`" #return from status line alias titl 'echo -n ${ti_ts}${prompt_}": `dirs`"${ti_fs}' #delayed vars endif Of course this could be done more simply as: set prompt="`tput smso;uname -n;echo '>';tput rmso` " alias titl 'echo -n "`tput ts;uname -n; echo -n :;dirs;tput fs`"' but I think the variable substitution method above is faster to execute. This solves some of the problems with terminal-dependent code, by using SYS V's tput command. ``tput'' is a simple program, but I haven't seen it ported to BSD/termcap. Anyone out there know if this has been done? Bernard A. Badger Jr. 407/984-6385 |``Use the Source, Luke!'' Secure Computer Products |``Get a LIFE!'' -- J.H. Conway Harris GISD, Melbourne, FL 32902 |Buddy, can you paradigm? Internet: bbadger%x102c@trantor.harris-atd.com|'s/./&&/' Tom sed expansively.