On Wed, Aug 14, 2013 at 6:05 PM, Vadim Zhukov <[email protected]> wrote:
> 2013/8/15 Andres Perera <[email protected]>:
>> On Wed, Aug 14, 2013 at 5:15 AM, Vadim Zhukov <[email protected]> wrote:
>>> + p)
>>> + set -f
>>> + if [ "${PWD##$OPTARG}" == "${PWD}" ]; then
>>> + cat >&2 <<EOE
>>> +${0##*/}: current directory does not seem to be under the
>>> +specified root directory: $OPTARG
>>> +EOE
>>> + exit 3
>>> + fi
>>> + set +f
>>
>> there's no need to toggle ``noglob''
>>
>> use ${PWD##"$OPTARG"} to suppress the globbing in the RHS of ``##''
>
> Nice idea, thanks! I was thinking that it won't work in all cases, but
> see below. :)
>
>>> +if [[ -z $portsdir ]]; then
>>> + set +e
>>> + portsdir=$(make -V PORTSDIR 2>/dev/null)
>>> + (($? == 0)) && portsdir=
>>> + set -e
>>> +fi
>>
>> there's no need to toggle ``errexit''
>>
>> use portsdir=$(make -V PORTSDIR 2>/dev/null) && portsdir=
>
> Another nice trick, thanks again!
the alternate form also exposes what i believe to be a logic bug
i think you meant to use:
portsdir=$(make -V PORTSDIR 2>/dev/null) || portsdir=
ie logical OR instead of logical AND, so that you retain the output of
`make -VPORTSDIR`, and avoid using heuristics further on
>
>> if the LHS of ``&&'' fails, the shell won't exit even if ``errexit''
>> is under effect
>>
>>> +
>>> +if [[ -z $portsdir ]]; then
>>> + # heuristics mode ON
>>> + pkgpath="${PWD##*/ports/*(mystuff/|openbsd-wip/|p5-ports-wip/)}"
>>
>>> + set -f
>>> + portsdir="${PWD%/$pkgpath}"
>>> + set +f
>>
>> same as previous unnecessary ``noglob'' toggling
>
> I thought that this wouldn't work here, because we already have double
> quotes around - but looks like they are not needed at all. At least,
> ksh does not do field splitting or glob expansion of $b in a=$b
> case... So a quiet a few double quotes could be dropped now. Thanks
> again!
ksh performs file name matching in the RHS of a parameter expansion
operator, *even during assignment*
/tmp/t $ touch foobar
/tmp/t $ v=foobar
/tmp/t $ g='foo???'
/tmp/t $ x=${v#"$g"}
/tmp/t $ echo "($x)"
(foobar)
/tmp/t $ x=${v#$g}
/tmp/t $ echo "($x)"
()
>
>>> + set -f
>>> + pkgpath="${PWD##$portsdir/}"
>>> + set +f
>>
>> same as previous unnecessary ``noglob'' toggling
>
> yep.
>
> --
> WBR,
> Vadim Zhukov
>