#!/bin/sh #------------------------------------------------------------------------------ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | Website: https://openfoam.org # \\ / A nd | Copyright (C) 2011-2024 OpenFOAM Foundation # \\/ 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 3 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, see . # # Script # foamCleanPath # # Description # Usage: foamCleanPath [-strip] path [exp1] .. [expN] # # Returns the with individual paths removed which match partially or # fully any expressions [exp1] ... [expN] provided. # #------------------------------------------------------------------------------ usage() { cat <" [exp1] .. [expN] options: -help print the usage Returns the with individual paths removed which match partially or fully any expressions [exp1] ... [expN] provided. + The must be a single quoted "" string with directory paths, separated by colons. + Each [exp1] ... [expN] may be a single expression or a colon-separated set of expressions. USAGE } error() { exec 1>&2 while [ "$#" -ge 1 ]; do echo "$1" >&2; shift; done usage exit 1 } strip= while [ "$#" -gt 0 ] do case "$1" in -h | -help) usage && exit 0 ;; -*) error ;; *) break ;; esac done [ "$#" -ge 1 ] || error "No arguments provided" oldPath="$1" ; shift # Quick exit if oldPath is not set, needed for LD_LIBRARY_PATH [ -n "$oldPath" ] || exit exps="$(echo "$*" | awk -F '[: ]' '{for(i=1;i<=NF;i++) print $i}')" # standard directories on PATH, e.g. /bin, /usr/bin stdPaths="$(getconf PATH)" for exp in $exps do # do not remove standard directories echo "$stdPaths" | grep -qE "(^|:)$exp(:|$)" && continue oldPath=$(echo "$oldPath" | \ sed -e "s|${exp}[^:]*:||g" | \ sed -e "s|:${exp}[^:]*$||g" ) done oldIFS=$IFS IFS=: newPath= for dir in $oldPath do # Ignore duplicates echo "$newPath" | grep -qE "(^|:)$dir(:|$)" && continue # Clean the dir if it exists [ -d "$dir" ] && dir="$(cd "$dir" && pwd)" # Add an entry, without a colon for first time [ "$newPath" ] && newPath="$newPath:$dir" && continue newPath="$dir" done IFS=$oldIFS echo "$newPath" #------------------------------------------------------------------------------