The call to foamCleanPath from etc/{bashrc,cshrc} passes all the wildcards together as a single argument - causing nothing to be cleaned. Now split the args on whitespace. Also added more IFS hacking to reduce forking.
115 lines
3.1 KiB
Bash
Executable File
115 lines
3.1 KiB
Bash
Executable File
#!/bin/sh
|
|
#------------------------------------------------------------------------------
|
|
# ========= |
|
|
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
# \\ / O peration |
|
|
# \\ / A nd | Copyright (C) 1991-2007 OpenCFD Ltd.
|
|
# \\/ M anipulation |
|
|
#-------------------------------------------------------------------------------
|
|
# License
|
|
# This file is part of OpenFOAM.
|
|
#
|
|
# OpenFOAM is free software; you can redistribute it and/or modify it
|
|
# under the terms of the GNU General Public License as published by the
|
|
# Free Software Foundation; either version 2 of the License, or (at your
|
|
# option) any later version.
|
|
#
|
|
# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
# for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with OpenFOAM; if not, write to the Free Software Foundation,
|
|
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
#
|
|
# Script
|
|
# foamCleanPath
|
|
#
|
|
# Description
|
|
# Usage: foamCleanPath path [wildcard] .. [wildcard]
|
|
#
|
|
# Prints its argument (which should be a ':' separated path)
|
|
# without all
|
|
# - duplicate elements
|
|
# - non-accessible directories
|
|
# - elements whose start matches a wildcard
|
|
#
|
|
# Note:
|
|
# - this routine will fail when directories have embedded spaces
|
|
# - false matches possible if a wildcard contains '.' (sed regex)
|
|
#------------------------------------------------------------------------------
|
|
if [ "$#" -lt 1 -o "$1" = "-h" -o "$1" = "-help" ]
|
|
then
|
|
cat <<USAGE 1>&2
|
|
Usage: ${0##*/} path [wildcard] .. [wildcard]
|
|
|
|
Prints its argument (which should be a ':' separated list) cleansed from
|
|
- duplicate elements
|
|
- non-accessible directories
|
|
- elements whose start matches one of the wildcard(s)
|
|
USAGE
|
|
exit 1
|
|
fi
|
|
|
|
dirList="$1"
|
|
shift
|
|
|
|
##DEBUG echo "input>$dirList<" 1>&2
|
|
|
|
# preserve current IFS and split on whitespace
|
|
oldIFS="$IFS"
|
|
IFS=' '
|
|
|
|
# "wildcard1 ... wildcardN" may have been passed as a single parameter
|
|
set -- $*
|
|
|
|
# strip out wildcards via sed
|
|
while [ "$#" -ge 1 ]
|
|
do
|
|
wildcard=$1
|
|
shift
|
|
##DEBUG echo "remove>$wildcard<" 1>&2
|
|
dirList=`echo "$dirList" | sed -e "s@${wildcard}[^:]*:@@g"`
|
|
done
|
|
|
|
# split on ':' (and on space as well to avoid any surprises)
|
|
IFS=': '
|
|
set -- $dirList
|
|
|
|
##DEBUG echo "intermediate>$dirList<" 1>&2
|
|
|
|
# rebuild the list from scratch
|
|
unset dirList
|
|
for dir
|
|
do
|
|
##DEBUG echo "check>$dir<" 1>&2
|
|
#- dirs must exist
|
|
if [ -e "$dir" ]
|
|
then
|
|
#- no duplicate dirs
|
|
duplicate=`echo " $dirList " | sed -ne "s@ $dir @DUP@p"`
|
|
|
|
if [ ! "$duplicate" ]
|
|
then
|
|
dirList="$dirList $dir"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# parse on whitespace
|
|
IFS=' '
|
|
set -- $dirList
|
|
|
|
# join on ':'
|
|
IFS=':'
|
|
dirList="$*"
|
|
|
|
# restore IFS
|
|
IFS="$oldIFS"
|
|
|
|
##DEBUG echo "output>$dirList<" 1>&2
|
|
echo "$dirList"
|
|
|
|
# -----------------------------------------------------------------------------
|