Package: bash
Version: 4.3-12
Severity: normal
Tags: patch
Hi.
Currently Debian sets something like the following for VI_EDIT_COMMAND,
EMACS_EDIT_COMMAND, FC_EDIT_COMMAND and POSIX_FC_EDIT_COMMAND:
${FCEDIT:-${EDITOR:-$(command -v editor || echo vi)}}
While this is nice it has several flaws:
- PATH may be set to a bogus value not containing vi and thus that would
fail.
Why do you use command here?
If you simply want /usr/bin/editor, than you could just give that.
If you want to allow either the shell to make editor a builtin command
or the user to redefine editor as function or alias than this has the
problems:
- if it was an alias like alias editor='vim -C' it ould return the
alias line, and subsequently things would break
- if it's another editor in a user supplied PATH, that may contain
spaces or other characters that need quoting
I'd suggest the following, which however doesn't solve the alias issue:
${FCEDIT:-${EDITOR:-$(command -v editor || PATH=/usr/bin printf
/usr/bin/vi)}}
Explanations:
- The reason for the $(…) is obviously to solve the potential problem
from above.
- Using the full pathname of vi, to solve the problem of a bogus PATH.
And I assume here that vi is never going to be a built-in.
- Strictly speaking, command and printf/echo are not defined by POSIX to
be built-ins.
For bash (and this is the only one that this patch affects) they are
however (and for command a non-built-in version seems to not even
exist).
But,... the user might have done something awkward like:
- disabled the built-in printf/echo, e.g. via enabled -n or some other
trick
- plus set a PATH which doesn't contain the binary version of
printf/echo, which both are part of coreutils (thus
essential+required) and busybox and thus guaranteed to be there).
You say this wouldn't happen? Well I know a friend called murphy, and
since this doesn't cost anything, why not making it right.
- I personally rather use printf than echo,... it's not slower and
strictly speaking, POSIX has deprecated echo.
If you can't live with that, change the PATH=/usr/bin to PATH=/bin.
Now how to solve the alias issue... not really sure about that,
one could either use sed and remove any starting ^alias but that's
quite hacky and requires another process.
Maybe:
${FCEDIT:-${EDITOR:-$( (unalias -a ; command -v editor || PATH=/usr/bin
printf /usr/bin/vi) )}}
- that would remove any aliases in the subshell environment between the
inner (…).
Don't forget the spaces between the braces,... $((…)) would lead to
trying arithmetic exapnsion ;-)
Cheers,
Chris.
--
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org