bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: weird problem -- path interpretted/eval'd as numeric expression


From: Greg Wooledge
Subject: Re: weird problem -- path interpretted/eval'd as numeric expression
Date: Fri, 29 Mar 2013 10:30:21 -0400
User-agent: Mutt/1.4.2.3i

On Fri, Mar 29, 2013 at 03:11:07PM +0100, John Kearney wrote:
> Actually I've had trouble
> 
> IFS=: read -ra paths <<< "$PATH"
> 
> and embedded new lines.

A directory with a newline in its name, in your PATH?  Terrifying.

> I think this is better
> find_file() {
>     local IFS=:
>     for dir in $PATH; do

But that one's vulnerable to globbing issues if a directory has a
wildcard character in its name.  If you're concerned about newlines
then you should be just as concerned with ? or *, I should think.

Workarounds:

 1) In yours, use set -f and set +f around unquoted $PATH to suppress
    globbing.

 2) In mine, use -d '' on the read command, and manually strip the
    trailing newline that <<< adds to the final element.

 3) In mine, use -d '' on the read command, and use < <(printf %s "$PATH")
    so there isn't an added trailing newline to strip.

> Ideally what I want to do is
> alias include=source\ "$(find_file "${1}")"
> but that doesn't work in bash and I still haven't found a way around the
> problem.

I can't think of an alias workaround off the top of my head either.
Even Simon Tatham's "magic aliases" require a helper function, which leads
back to the variable scope issue, the avoidance of which was the whole
reason to attempt an alias (instead of a function) in the first place....

> The only way I can think to do it is to use a second file.
> 
> cat <<EOF ><known_path>/source_wrapper.sh
>     find_file "${1:?Missing File Name }" || return $?
>     source "${FOUND_FILE}"
> EOF
> alias include=source\ "<known_path>/source_wrapper.sh"

The <<EOF needs to be <<'EOF' (or similar), and of course you have to
include the definition of find_file in the wrapper script.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]