Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: variable containing the current command



here is my preexec

~ which preexec
preexec () {
	word=$* 
	word=$word[(w)0] 
	case $word in
		cd*|ls*)  ;;
		*) print -Pn "\e]2;%n@%m $word \a" ;;
	esac
}

for some reason $1 does not get set properly under 3.0.5 extended so I
manually parse it out from $*, dunno about newer versions.

Mike

On Wed, May 26, 1999 at 10:17:41PM +0000, Bart Schaefer wrote:
> On May 26,  2:23pm, benjamin@xxxxxxxxxxxxxx wrote:
> > Subject: variable containing the current command
> > Is there a zsh environment variable that contains the current command
> > so that it can be referenced in preexec() or precmd() (or ideally both)?
> 
> In preexec, the positional parameter $1 holds the entire command line just
> as it was read from the terminal (after history expansion but before any
> other expansions/substitutions).
> 
> You could have preexec copy this to a global parameter where precmd can
> see it later.
> 
> On May 26,  5:40pm, Sweth Chandramouli wrote:
> > Subject: Re: variable containing the current command
> > 	$_ is almost what you are looking for; it is supposed to be set for
> > any command to the full name of that command.
> 
> That's not quite correct.  From the doc:
> 
> `_'
>      The last argument of the previous command.  Also, this parameter
>      is set in the environment of every command executed to the full
>      pathname of the command.
> 
> So it's only during the execution of a command that you can find the path
> of that command in $_.  Once you're back in the shell (as during precmd),
> you get the last word of the previous command line (not the first; try
> your "ls" example with some file name arguments to "ls").
> 
> As for this:
> 
> > (astaroth/3)~: ls
> > Ready to do:preexec
> 
> I suspect it has something to do with how or when preexec is executed.
> PWS could tell us more, but he's out for a few days.



Messages sorted by: Reverse Date, Date, Thread, Author