PF_cFlags="--description --help --version" AllTimeFolders= __getAllTime(){ files=( $(ls) ) deleteFiles=(settings caseSetup cleanThisCase VTK runThisCase stl postprocess postProcess) declare -A delk for del in "${deleteFiles[@]}" ; do delk[$del]=1 ; done # Tag items to remove, based on for k in "${!files[@]}" ; do [ "${delk[${files[$k]}]-}" ] && unset 'files[k]' done # Compaction COMPREPLY=("${files[@]}") AllTimeFolders="${files[@]}" } __getFields(){ __getAllTime local -A unique_files=() for dir in $AllTimeFolders; do # Check if the directory exists if [ ! -d "$dir" ]; then continue # Skip to the next directory fi files_in_dir=$(find "$dir" -maxdepth 1 -type f -printf '%f\n' | sort -u) # Add filenames to the associative array (duplicates will be overwritten) while IFS= read -r filename; do unique_files["$filename"]=1 # Just the key is important, value can be anything done <<< "$files_in_dir" done COMPREPLY=("${!unique_files[@]}") AllTimeFolders= } _pFlowToVTK(){ if [ "$3" == "--time" ] ; then __getAllTime elif [ "$3" == "--fields" ]; then __getFields else COMPREPLY=( $(compgen -W "$PF_cFlags --binary --no-geometry --no-particles --out-folder --time --separate-surfaces --fields" -- "$2") ) fi } complete -F _pFlowToVTK pFlowToVTK _postprocessPhasicFlow(){ if [ "$3" == "--time" ]; then __getAllTime else COMPREPLY=( $(compgen -W "$PF_cFlags --out-folder --time --zeroFolder" -- "$2") ) fi } complete -F _postprocessPhasicFlow postprocessPhasicFlow complete -W "$PF_cFlags --positionParticles-only --setFields-only --coupling" particlesPhasicFlow complete -W "$PF_cFlags --coupling" geometryPhasicFlow complete -W "$PF_cFlags --coupling" iterateGeometry complete -W "$PF_cFlags" iterateSphereParticles complete -W "$PF_cFlags" sphereGranFlow complete -W "$PF_cFlags" grainGranFlow complete -W "$PF_cFlags" checkPhasicFlow