From 09e8377d73075a66d4b077981c46a26e2bcf6be6 Mon Sep 17 00:00:00 2001 From: Chris Greenshields Date: Tue, 24 Aug 2021 15:21:29 +0100 Subject: [PATCH] foamGet: sets the target directory after the file selection is confirmed --- bin/foamGet | 61 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 24 deletions(-) diff --git a/bin/foamGet b/bin/foamGet index e254278b1e..0b50729413 100755 --- a/bin/foamGet +++ b/bin/foamGet @@ -3,7 +3,7 @@ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | Website: https://openfoam.org -# \\ / A nd | Copyright (C) 2018-2020 OpenFOAM Foundation +# \\ / A nd | Copyright (C) 2018-2021 OpenFOAM Foundation # \\/ M anipulation | #------------------------------------------------------------------------------ # License @@ -77,7 +77,7 @@ findFiles () { _prefix="$2" _ext="$3" - if [ -z "$_ext" -o "$_ext" = "ANY" ] ; then + if [ -z "$_ext" ] || [ "$_ext" = "ANY" ] ; then findFilesInDirs "$_dirs" "$_prefix" else findFilesInDirs "$_dirs" "${_prefix}.${_ext}" @@ -92,7 +92,7 @@ pruneFiles () { -maxdepth 1 -mindepth 1 \ -type d -name "[[:digit:]]*" \ -o -name "dev" 2> /dev/null | \ - grep -v $WM_PROJECT_VERSION | \ + grep -v "$WM_PROJECT_VERSION" | \ awk -F "/" '{print $NF}')" [ "$_vers" ] && \ for _v in $_vers @@ -141,10 +141,37 @@ listArgs () { cpFile () { _file="$1" _dir="$2" + + [ -d "$_dir" ] || return 0 + echo "Copying $_file to $_dir" cp "$_file" "$_dir" } +setTgt () { + _prefix="$1" + _file="$2" + _tgt="$3" + + ! [ "$_tgt" ] && \ + echo "$_file" | grep -Eq "(fvModel|fvConstraint)" && \ + _tgt="constant" + + ! [ "$_tgt" ] && \ + case "$prefix" in + All*) _tgt="." ;; + *Properties|*Cloud) _tgt="constant" ;; + s) _tgt="0" ;; + *) _tgt="system" ;; + esac + + echo "$_tgt" + + [ -d "$_tgt" ] && return 0 + echo "target directory does not exist: '$_tgt'" >&2 + return 0 +} + setFile () { _files="$1" _n="$2" @@ -207,25 +234,8 @@ done [ $# -eq 1 ] || error "missing argument: no file name/prefix supplied" prefix="$1" -[ "$tgt" ] || \ - case "$prefix" in - All*) - tgt="." - ;; - *Properties|*Cloud) - tgt="constant" - ;; - s) - tgt="0" - ;; - *) - tgt="system" - ;; - esac - [ -s "system/controlDict" ] || \ echo "Warning: cannot find OpenFOAM case directory (no system/controlDict file)" -[ -d "$tgt" ] || error "target directory does not exist: '$tgt'" files="$(findFiles "$searchDirs" "$prefix" "$ext")" @@ -236,7 +246,9 @@ files="$(pruneFiles $files)" error "no file $prefix found $(noFilesMessage "$ext")" nFiles="$(nArgs "$files")" -[ "$nFiles" -eq 1 ] && cpFile "$files" "$tgt" && exit 0 +[ "$nFiles" -eq 1 ] && \ + tgt="$(setTgt "$prefix" "$files" "$tgt")" && \ + cpFile "$files" "$tgt" && exit 0 echo "Multiple files with \"$prefix\" prefix found:" suggest="$(listArgs "$files")" @@ -246,15 +258,16 @@ echo "$files" | grep -q "annotated/" && \ printf "\n%s" "Enter file number (1-$nFiles) to obtain description " [ -n "$suggest" ] && printf "%s" "(suggest $suggest) " printf "%s" ": " -read nFile +read -r nFile -[ -z "$nFile" -a -n "$suggest" ] && nFile="$suggest" +[ -z "$nFile" ] && [ -n "$suggest" ] && nFile="$suggest" [ -z "$nFile" ] && \ echo "Cannot specify nothing; re-run and enter a file number" && exit 1 ! [ "$nFile" -eq "$nFile" ] 2>/dev/null && \ echo "\"$nFile\" is not a number between 1 and $nFiles" && exit 1 -[ "$nFile" -lt 1 -o "$nFile" -gt "$nFiles" ] && \ +[ "$nFile" -lt 1 ] || [ "$nFile" -gt "$nFiles" ] && \ echo "\"$nFile\" is not a number between 1 and $nFiles" && exit 1 file="$(setFile "$files" "$nFile")" +tgt="$(setTgt "$prefix" "$file" "$tgt")" cpFile "$file" "$tgt"