2018-05-25 10:13 BST

View Issue Details Jump to Notes ]
IDProjectCategoryView StatusLast Update
0002928OpenFOAMPatchpublic2018-05-15 11:55
Reporterwyldckat 
Assigned Tochris 
PrioritylowSeverityminorReproducibilityalways
StatusresolvedResolutionfixed 
Product Version5.0 
Target VersionFixed in Version 
Summary0002928: 'foamSearch' will not work if executed from within a read-only directory
Description'foamSearch' is currently designed to rely on a temporary file for gathering the output from several searches made with 'foamDictionary'.

However, since the path to the file is not set to the system's default temporary path and is instead using the local directory from which the command was executed, this means that it will break when something like the following is done (using OpenFOAM 5 Deb packages):

  $ tut
  # goes to '/opt/openfoam5/tutorials', which is read-only

  $ foamSearch . fvSchemes ddtSchemes.default
  mktemp: failed to create file via template ‘tmp.XXXXXX’: Permission denied
  No keyword ddtSchemes.default found in fvSchemes files


One solution is to use "/tmp" as the default path for the temporary file; another solution is to simply drop the need for a temporary file and instead pipe the output from the 'for' loop to the existing sorting pipe.

Attached are the following files, which provides the latter solution:

  - 'foamSearch' - the file already with the patch applied, for replacing the file 'bin/foamSearch' on both OpenFOAM 5.x and dev.

  - 'foamSearch_piped.patch' - the proposed patch.


Changes made in the proposed patch:

  1. The last for 'loop' is piped directly to the 'sort' pipe line.

  2. Added a line break between the examples given by '-help', to that it's a bit easier to tell them apart.

  3. Updated the Copyright year.
Additional InformationHave a vague memory of having seen this issue in the past myself, but was reminded more recently by this bug report: https://develop.openfoam.com/Development/OpenFOAM-plus/issues/700
TagsNo tags attached.
Attached Files
  • ? file icon foamSearch (2,791 bytes) 2018-05-12 18:02 -
    #!/bin/sh
    #------------------------------------------------------------------------------
    # =========                 |
    # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    #  \\    /   O peration     |
    #   \\  /    A nd           | Copyright (C) 2016-2018 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 <http://www.gnu.org/licenses/>.
    #
    # Script
    #     foamSearch
    #
    # Description
    #     Searches a directory for dictionary files of a particular name and
    #     extracts entries of a particular keyword, sorting into a unique list.
    #
    #     Requires foamDictionary.
    #
    #------------------------------------------------------------------------------
    Script=${0##*/}
    
    usage() {
        cat<<USAGE
    
    Usage: $Script [OPTIONS] <directory> <filename> <keyword>
    options:
      -count | -c         prefix lines by the number of occurrences
      -help  | -h         print the usage
    
    Searches the <directory> for files named <filename> and extracts entries with
    <keyword>.  Sorts result into a list of unique entries (removing repeats).
    
    Examples:
      * Default ddtSchemes entries in the fvSchemes files in all tutorials:
          foamSearch $FOAM_TUTORIALS fvSchemes  ddtSchemes.default
    
      * Relaxations factors for U in fvSolutions files in all tutorials:
          foamSearch -c $FOAM_TUTORIALS fvSolution  relaxationFactors.equations.U
    USAGE
    }
    
    error() {
        while [ "$#" -ge 1 ]; do echo "$1"; shift; done
        usage
        exit 1
    }
    
    case "$1" in
    (-c | -count)
        count="-c"
        shift
        ;;
    (-h | -help)
        usage && exit 0
        ;;
    -*)
        error "$1 is not a valid option/filename"
        ;;
    esac
    
    [ "$#" -eq 3 ] || error "Wrong number of arguments: expected 3, found $#"
    [ -d "$1" ] || error "$1 is not a directory"
    
    files=$(find "$1" -name "$2")
    [ -n "$files" ] || error "No file $2 found in $1"
    
    for f in $files
    do
        foamDictionary -entry "$3" "$f" 2>/dev/null
    done | \
        sort | uniq $count | sed '/^[\t 1-9]*$/d' || \
        echo "No keyword $3 found in $2 files"
    
    #------------------------------------------------------------------------------
    
    ? file icon foamSearch (2,791 bytes) 2018-05-12 18:02 +
  • patch file icon foamSearch_piped.patch (1,628 bytes) 2018-05-12 18:02 -
    diff --git a/bin/foamSearch b/bin/foamSearch
    index 5ef36b7..3ff7d1e 100755
    --- a/bin/foamSearch
    +++ b/bin/foamSearch
    @@ -3,7 +3,7 @@
     # =========                 |
     # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
     #  \\    /   O peration     |
    -#   \\  /    A nd           | Copyright (C) 2016-2017 OpenFOAM Foundation
    +#   \\  /    A nd           | Copyright (C) 2016-2018 OpenFOAM Foundation
     #    \\/     M anipulation  |
     #-------------------------------------------------------------------------------
     # License
    @@ -48,6 +48,7 @@ Searches the <directory> for files named <filename> and extracts entries with
     Examples:
       * Default ddtSchemes entries in the fvSchemes files in all tutorials:
           foamSearch $FOAM_TUTORIALS fvSchemes  ddtSchemes.default
    +
       * Relaxations factors for U in fvSolutions files in all tutorials:
           foamSearch -c $FOAM_TUTORIALS fvSolution  relaxationFactors.equations.U
     USAGE
    @@ -75,19 +76,14 @@ esac
     [ "$#" -eq 3 ] || error "Wrong number of arguments: expected 3, found $#"
     [ -d "$1" ] || error "$1 is not a directory"
     
    -tmp=$(mktemp tmp.XXXXXX)
     files=$(find "$1" -name "$2")
     [ -n "$files" ] || error "No file $2 found in $1"
     
     for f in $files
     do
    -    foamDictionary -entry "$3" "$f" 2>/dev/null >> "$tmp"
    -done
    -
    -[ -s "$tmp" ] && \
    -    sort "$tmp" | uniq $count | sed '/^[\t 1-9]*$/d' || \
    +    foamDictionary -entry "$3" "$f" 2>/dev/null
    +done | \
    +    sort | uniq $count | sed '/^[\t 1-9]*$/d' || \
         echo "No keyword $3 found in $2 files"
     
    -rm "$tmp" 2>/dev/null
    -
     #------------------------------------------------------------------------------
    
    patch file icon foamSearch_piped.patch (1,628 bytes) 2018-05-12 18:02 +

-Relationships
+Relationships

+Notes

-Issue History
Date Modified Username Field Change
2018-05-12 18:02 wyldckat New Issue
2018-05-12 18:02 wyldckat Status new => assigned
2018-05-12 18:02 wyldckat Assigned To => chris
2018-05-12 18:02 wyldckat File Added: foamSearch
2018-05-12 18:02 wyldckat File Added: foamSearch_piped.patch
2018-05-15 11:55 chris Note Added: 0009577
2018-05-15 11:55 chris Status assigned => resolved
2018-05-15 11:55 chris Resolution open => fixed
+Issue History