问题
I am trying to install OpenFoam on ubuntu bash on Win 10. I am following these steps: OpenFoam installation on win 10 Ubuntu bash
at this step
source $HOME/.bashrc
I get the following error:
-bash: eval: line 38: syntax error near unexpected token `('
-bash: eval: line 38: `PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Program:Files:(x86)/Common:Files/Oracle/Java/javapath_target_275852031:/mnt/c/Windows/System32:/mnt/c/DAYSIM/lib:/mnt/c/DAYSIM/bin:/mnt/c/Windows:/mnt/c/Windows/System32/wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0:/mnt/c/Windows/System32/OpenSSH:Files/Microsoft:SQL:Server/120/Tools/Binn:Files/Common:Files/Autodesk:Shared:/mnt/c/Radiance/bin:Server/130/Tools/Binn:Files/dotnet:Server/Client:SDK/ODBC/130/Tools/Binn:(x86)/Microsoft:Server/140/Tools/Binn:Server/140/DTS/Binn:Server/140/Tools/Binn/ManagementStudio:/mnt/c/Users/danie/AppData/Local/Programs/Python/Python36/Scripts:/mnt/c/Users/danie/AppData/Local/Programs/Python/Python36:/mnt/c/Users/danie/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/danie/AppData/Local/Programs/Microsoft:VS:Code/bin:/snap/bin'
-bash: eval: line 62: syntax error near unexpected token `('
-bash: eval: line 62: `PATH=/opt/OpenFOAM/ThirdParty-v1806/platforms/linux64Gcc63/openmpi-1.10.4/bin:/opt/OpenFOAM/ThirdParty-v1806/platforms/linux64/gcc-6.3.0/bin:/home/daniel/OpenFOAM/daniel-v1806/platforms/linux64Gcc63DPInt32Opt/bin:/opt/OpenFOAM/site/v1806/platforms/linux64Gcc63DPInt32Opt/bin:/opt/OpenFOAM/OpenFOAM-v1806/platforms/linux64Gcc63DPInt32Opt/bin:/opt/OpenFOAM/OpenFOAM-v1806/bin:/opt/OpenFOAM/OpenFOAM-v1806/wmake:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Program:Files:(x86)/Common:Files/Oracle/Java/javapath_target_275852031:/mnt/c/Windows/System32:/mnt/c/DAYSIM/lib:/mnt/c/DAYSIM/bin:/mnt/c/Windows:/mnt/c/Windows/System32/wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0:/mnt/c/Windows/System32/OpenSSH:Files/Microsoft:SQL:Server/120/Tools/Binn:Files/Common:Files/Autodesk:Shared:/mnt/c/Radiance/bin:Server/130/Tools/Binn:Files/dotnet:Server/Client:SDK/ODBC/130/Tools/Binn:(x86)/Microsoft:Server/140/Tools/Binn:Server/140/DTS/Binn:Server/140/Tools/Binn/ManagementStudio:/mnt/c/Users/danie/AppData/Local/Programs/Python/Python36/Scripts:/mnt/c/Users/danie/AppData/Local/Programs/Python/Python36:/mnt/c/Users/danie/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/danie/AppData/Local/Programs/Microsoft:VS:Code/bin:/snap/bin:'
-bash: eval: line 38: syntax error near unexpected token `('
-bash: eval: line 38: `PATH=/opt/OpenFOAM/ThirdParty-v1806/platforms/linux64Gcc63/gperftools-2.5/bin:/opt/OpenFOAM/ThirdParty-v1806/platforms/linux64Gcc63/openmpi-1.10.4/bin:/opt/OpenFOAM/ThirdParty-v1806/platforms/linux64/gcc-6.3.0/bin:/home/daniel/OpenFOAM/daniel-v1806/platforms/linux64Gcc63DPInt32Opt/bin:/opt/OpenFOAM/site/v1806/platforms/linux64Gcc63DPInt32Opt/bin:/opt/OpenFOAM/OpenFOAM-v1806/platforms/linux64Gcc63DPInt32Opt/bin:/opt/OpenFOAM/OpenFOAM-v1806/bin:/opt/OpenFOAM/OpenFOAM-v1806/wmake:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Program:Files:(x86)/Common:Files/Oracle/Java/javapath_target_275852031:/mnt/c/Windows/System32:/mnt/c/DAYSIM/lib:/mnt/c/DAYSIM/bin:/mnt/c/Windows:/mnt/c/Windows/System32/wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0:/mnt/c/Windows/System32/OpenSSH:Files/Microsoft:SQL:Server/120/Tools/Binn:Files/Common:Files/Autodesk:Shared:/mnt/c/Radiance/bin:Server/130/Tools/Binn:Files/dotnet:Server/Client:SDK/ODBC/130/Tools/Binn:(x86)/Microsoft:Server/140/Tools/Binn:Server/140/DTS/Binn:Server/140/Tools/Binn/ManagementStudio:/mnt/c/Users/danie/AppData/Local/Programs/Python/Python36/Scripts:/mnt/c/Users/danie/AppData/Local/Programs/Python/Python36:/mnt/c/Users/danie/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/danie/AppData/Local/Programs/Microsoft:VS:Code/bin:/snap/bin'
I don't understand what is happening here. Any help would be appreciated.
The OpenFoam bashrc codes are as follows:
#----------------------------------*-sh-*--------------------------------------
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
# \\/ M anipulation | Copyright (C) 2016-2018 OpenCFD Ltd.
#------------------------------------------------------------------------------
# License
# This file is part of OpenFOAM, licensed under GNU General Public License
# <http://www.gnu.org/licenses/>.
#
# File
# etc/bashrc
#
# Description
# The OpenFOAM environment for POSIX shell (eg, bash,dash,zsh,...).
# Source manually or from the ~/.bashrc or ~/.profile files.
#
# Many settings can be overridden using a <prefs.sh> file:
#
# - Base values (eg, from system admin):
# - $WM_PROJECT_DIR/etc/prefs.sh
#
# - User or group values (first file found):
# - ~/.OpenFOAM/$WM_PROJECT_VERSION/prefs.sh
# - ~/.OpenFOAM/prefs.sh
# - $WM_PROJECT_SITE/site/$WM_PROJECT_VERSION/prefs.sh
# - $WM_PROJECT_SITE/site/prefs.sh
#
# Note: Changes made to this bashrc file may be lost with the next upgrade.
#------------------------------------------------------------------------------
export WM_PROJECT=OpenFOAM
export WM_PROJECT_VERSION=v1806
# [FOAM_INST_DIR] - parent directory containing the OpenFOAM installation.
# \- When this file is located as $WM_PROJECT_DIR/etc/bashrc, the next lines
# should work when sourced by BASH or ZSH shells. If this however fails,
# set one of the fallback values to an appropriate path.
# --
rc="${BASH_SOURCE:-${ZSH_NAME:+$0}}"
[ -n "$rc" ] && FOAM_INST_DIR=$(\cd $(dirname $rc)/../.. && \pwd -L) || \
FOAM_INST_DIR=$HOME/$WM_PROJECT
# FOAM_INST_DIR=/opt/$WM_PROJECT
# FOAM_INST_DIR=/usr/local/$WM_PROJECT
#
# END OF (NORMAL) USER EDITABLE PART
################################################################################
: # Extra safety - if the user commented out all fallback values
unset rc
# Configuration environment variables.
# Should override via <prefs.sh> file instead of editing this file.
# [WM_COMPILER_TYPE] - Compiler location:
# = system | ThirdParty
export WM_COMPILER_TYPE=ThirdParty
# [WM_COMPILER] - Compiler:
# = Gcc | Gcc4[8-9] | Gcc5[1-5] | Gcc6[1-4] | Gcc7[1-3] | Gcc8[1] | GccKNL |
# Clang | Clang3[7-9] | Clang[4-6]0 | Icc | IccKNL | Cray | Arm
export WM_COMPILER=Gcc63
# [WM_ARCH_OPTION] - Memory addressing:
# = 32 | 64
# * on a 64-bit OS this can be 32 or 64
# * on a 32-bit OS, it is always 32-bit and this option is ignored
export WM_ARCH_OPTION=64
# [WM_PRECISION_OPTION] - Floating-point precision:
# = DP | SP
export WM_PRECISION_OPTION=DP
# [WM_LABEL_SIZE] - Label size in bits:
# = 32 | 64
export WM_LABEL_SIZE=32
# [WM_COMPILE_OPTION] - Optimised, debug, profiling:
# = Opt | Debug | Prof
export WM_COMPILE_OPTION=Opt
# [WM_MPLIB] - MPI implementation:
# = SYSTEMOPENMPI | OPENMPI | SYSTEMMPI | MPI | MPICH | MPICH-GM |
# HPMPI | CRAY-MPICH | FJMPI | QSMPI | SGIMPI | INTELMPI | USERMPI
export WM_MPLIB=OPENMPI
#------------------------------------------------------------------------------
# (legacy / advanced)
#
# [FOAM_SIGFPE] - Trap floating-point exceptions.
# - overrides the 'trapFpe' controlDict entry
# = true | false
#export FOAM_SIGFPE=true
# [FOAM_SETNAN] - Initialize memory with NaN
# - overrides the 'setNaN' controlDict entry
# = true | false
#export FOAM_SETNAN=false
# [WM_OSTYPE] - Operating System Type:
# = POSIX
#export WM_OSTYPE=POSIX
################################################################################
# Old directories to be cleaned from PATH, LD_LIBRARY_PATH
foamOldDirs="$WM_PROJECT_DIR $WM_THIRD_PARTY_DIR \
$HOME/$WM_PROJECT/$USER $FOAM_USER_APPBIN $FOAM_USER_LIBBIN \
$WM_PROJECT_SITE $FOAM_SITE_APPBIN $FOAM_SITE_LIBBIN"
# Location of installation and third-party software
export WM_PROJECT_INST_DIR=$FOAM_INST_DIR
export WM_PROJECT_DIR=$WM_PROJECT_INST_DIR/$WM_PROJECT-$WM_PROJECT_VERSION
export WM_THIRD_PARTY_DIR=$WM_PROJECT_INST_DIR/ThirdParty-$WM_PROJECT_VERSION
# [WM_PROJECT_SITE] - Location of site-specific (group) files
# default (unset) implies WM_PROJECT_INST_DIR/site
if [ -d "$WM_PROJECT_SITE" ]
then
export WM_PROJECT_SITE
else
unset WM_PROJECT_SITE
fi
# [WM_PROJECT_USER_DIR] - Location of user files
export WM_PROJECT_USER_DIR=$HOME/$WM_PROJECT/$USER-$WM_PROJECT_VERSION
# Load shell functions
. $WM_PROJECT_DIR/etc/config.sh/functions
# Overrides via <prefs.sh>
_foamEtc -mode=o prefs.sh # 1) other (system) values
_foamEtc -mode=ug prefs.sh # 2) user or group values
# Evaluate command-line parameters and record settings for later.
# These can be used to set/unset values, specify additional files etc.
export FOAM_SETTINGS="$@"
_foamEval $@
# Clean standard environment variables (PATH, MANPATH, LD_LIBRARY_PATH)
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
export PATH MANPATH LD_LIBRARY_PATH
_foamClean PATH "$foamOldDirs"
_foamClean MANPATH "$foamOldDirs"
_foamClean LD_LIBRARY_PATH "$foamOldDirs"
# Setup for OpenFOAM compilation etc
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_foamEtc -config settings
# Setup for third-party packages
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_foamEtc -config mpi
_foamEtc -config paraview -- $@ # Pass through for evaluation
_foamEtc -config vtk
_foamEtc -config ensight
_foamEtc -config gperftools
## _foamEtc -config ADIOS
## _foamEtc -config ADIOS2
_foamEtc -config CGAL
_foamEtc -config scotch
_foamEtc -config FFTW
# Interactive shell
if /usr/bin/tty -s 2>/dev/null
then
_foamEtc -config aliases
[ "${BASH_VERSINFO:-0}" -ge 4 ] && _foamEtc -config bash_completion
fi
# Clean environment paths again. Only remove duplicates
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
export PATH MANPATH LD_LIBRARY_PATH
_foamClean PATH
_foamClean MANPATH
_foamClean LD_LIBRARY_PATH
# Add trailing ':' for system manpages
if [ -n "$MANPATH" ]
then
MANPATH="${MANPATH}:"
fi
if [ -n "$LD_PRELOAD" ]
then
export LD_PRELOAD
_foamClean LD_PRELOAD
fi
# Cleanup temporary information
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Unload shell functions
. $WM_PROJECT_DIR/etc/config.sh/functions
# Variables (done as the last statement for a clean exit code)
unset FOAM_INST_DIR # Old variable name (OpenFOAM-v1606) - now unneeded
unset cleaned foamOldDirs
#------------------------------------------------------------------------------
回答1:
The answer is how foamCleanPath was using IFS splitting internally (with whitespace) on the PATH. This has now been changed in the current develop branch with changes similar to the last (deleted) answer.
https://develop.openfoam.com/Development/OpenFOAM-plus/commit/0a2768667f4aa0eb02e41ab2a2de72dbf00e4af6
Additionally, OpenFOAM now allows logical instead of physical names for cwd(), which provides an additional means of working around issues when the case directory contains whitespace.
https://develop.openfoam.com/Development/OpenFOAM-plus/commit/b7054272989a0e5fddbaf6dfbdbfb726f7db8539
回答2:
bash
(or your .bashrc
) does not cope with $PATH
containing unescaped parentheses. Windows by default has C:\Program Files (x86)
in its path, and likely this gets translated under the Linux subsystem into /mnt/c/Program Files (x86)
. Some bad handling then converts that into (for example) /mnt/c/Program:Files:(x86)
, and then bash
chokes on the parentheses.
If you show the relevant lines of your .bashrc
, maybe fixes can be found. Most likely the following will work:
export PATH="$PATH":/some/new/path
instead of
export PATH=$PATH:/some/new/path
Update
As your .bashrc
is sourcing another bashrc
file, it turns out the problem is with that other bashrc
file. That file does not cope with whitespace.
See also
How to add Path with space in bash variable
https://unix.stackexchange.com/questions/26047/how-to-correctly-add-a-path-to-path
回答3:
Thanks to @user10142377 the problem is solved. The codes within foamCleanPath must be replaced with this one:
#!/bin/sh
#------------------------------------------------------------------------------
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
# \\/ M anipulation | Copyright (C) 2017-2018 OpenCFD Ltd.
#-------------------------------------------------------------------------------
# License
# This file is part of OpenFOAM, licensed under GNU General Public License
# <http://www.gnu.org/licenses/>.
#
# Script
# foamCleanPath
#
# Description
# Usage: foamCleanPath [OPTION] path [filter] .. [filter]
# foamCleanPath [OPTION] -env=name [filter] .. [filter]
#
# Prints its argument (which should be a ':' separated path)
# without the following:
# - duplicate elements
# - elements matching the specified filter(s)
# - inaccessible directories (with the -strip option)
#
# Note
# - false matches possible when the filter contains '.' (sed regex) etc.
# - a single composite filter can be passed in. This composite filter
# is assumed to be delimited by whitespace, colons or semi-colons.
#
# Examples for cleaning the path:
#
# - Using explicit arguments
# cleaned=$(foamCleanPath "$PATH" dir1:dir2) && PATH=$cleaned
#
# - Variable to clean passed as an option
# cleaned=$(foamCleanPath -env=PATH dir1:dir2) && PATH=$cleaned
#
# - Using shell evaluation for the output
# eval $(foamCleanPath -sh=PATH $PATH" dir1:dir2)
# eval "$(foamCleanPath -sh=PATH -env=PATH dir1:dir2)"
# eval "$(foamCleanPath -sh-env=PATH dir1:dir2)"
#
# - Similarly for c-shell
# eval `foamCleanPath -csh-env=PATH dir1:dir2`
#
#------------------------------------------------------------------------------
usage() {
cat <<USAGE 1>&2
Usage: foamCleanPath [OPTION] path [filter] .. [filter]
foamCleanPath [OPTION] -env=name [filter] .. [filter]
options:
-csh=NAME Produce 'setenv NAME ...' output for csh eval
-sh=NAME Produce 'NAME=...' output for sh eval
-csh-env=NAME As per -csh, with -env for initial content
-sh-env=NAME As per -sh, with -env for initial content
-env=NAME Evaluate NAME to obtain initial content
-debug Print debug information to stderr
-strip Remove inaccessible directories
-verbose Report some progress (input, output, ...)
-help Print the usage
Prints its argument (which should be a ':' separated list) cleansed from
* duplicate elements
* elements whose start matches one of the filters
* inaccessible directories (the -strip option)
Exit status
0 on success
1 general error
2 initial value of 'path' is empty
USAGE
exit 1
}
# Report error and exit
die()
{
exec 1>&2
echo
echo "Error encountered:"
while [ "$#" -ge 1 ]; do echo " $1"; shift; done
echo
echo "See 'foamCleanPath -help' for usage"
echo
exit 1
}
#-------------------------------------------------------------------------------
# Input and outputs
unset dirList shellOutput
# Parse options
unset optDebug optEnvName optStrip optVerbose
while [ "$#" -gt 0 ]
do
case "$1" in
-h | -help*)
usage
;;
-csh=* | -sh=* | -csh-env=* | -sh-env=*)
name="${1#*=}"
[ -n "$name" ] || die "Option '$1' missing an ENVNAME"
# Output prefix
case "$1" in
-csh*)
shellOutput="setenv $name " # eg, "setenv PATH xyz"
;;
*)
shellOutput="$name=" # eg, "PATH=xyz"
;;
esac
# For (-csh-env | -sh-env) also use name for input evaluation
case "$1" in
*-env=*)
optEnvName="$name"
;;
esac
;;
-env=*)
name="${1#*=}"
[ -n "$name" ] || die "Option '$1' missing an ENVNAME"
optEnvName="$name"
;;
-debug)
optDebug=true
;;
-strip)
optStrip=true
;;
-verbose)
optVerbose=true
;;
*)
break
;;
esac
shift
done
# Basic checks
if [ -n "$optEnvName" ]
then
eval "dirList=\$$optEnvName"
elif [ "$#" -ge 1 ]
then
dirList="$1"
shift
else
die "Requires at least one argument, or use the -env option"
fi
[ -n "$dirList" ] || exit 2 # Quick exit on empty 'dirList'
#-------------------------------------------------------------------------------
# Debugging (optional)
if [ -n "$optDebug" ]
then
printDebug() { while [ "$#" -ge 1 ]; do echo "$1" 1>&2; shift; done; }
else
printDebug() { true; } # No-op
fi
# Optional test for directory existence
if [ -n "$optStrip" ]
then
isDir() { test -d "$1"; } # Check for directory existence
else
isDir() { test -n "$1"; } # Only check for non-zero string
fi
# The "filter ... filterN" may have been passed as a single parameter
# or may contain ':' separators.
# Currently (OCT-2018) also accept split on whitespace too.
oldIFS="$IFS" # Preserve initial IFS
IFS=':; ' # Split on colon, semicolon, whitespace
set -- $*
if [ -n "$optVerbose" ]
then
echo "clean: $dirList" 1>&2
echo "with: $@" 1>&2
fi
printDebug "input>$dirList<"
# Apply filters via sed. Path and filter cannot contain '?'.
for filter
do
if [ -n "$filter" ]
then
printDebug "remove>$filter<"
dirList=$(echo "$dirList:" | sed -e "s?${filter}[^:]*:??g")
fi
done
printDebug "intermediate>$dirList<"
IFS=':' # Split on colon. No split on whitespace.
set -- $dirList
# Rebuild the list
unset dirList
for dir
do
printDebug "check>$dir< in $dirList"
if isDir "$dir"
then
# Detect duplicates (ie, dir already in the list)
duplicate=$(echo ":$dirList:" | sed -ne '\?:'"$dir"':?p')
if [ -n "$duplicate" ]
then
printDebug "duplicate>$dir<"
else
dirList="${dirList}${dirList:+:}$dir"
fi
fi
done
IFS="$oldIFS" # Restore initial IFS
printDebug "output>$dirList<"
if [ -n "$optVerbose" ]
then
echo "output: \"$dirList\"" 1>&2
fi
echo "$shellOutput\"$dirList\""
#------------------------------------------------------------------------------
The file can be found at bin folder within OpenFoam application. This link goes to original discussion within gitlab of OpenFoam.
来源:https://stackoverflow.com/questions/52782457/openfoam-win-10-ubuntu-bash-installing-fails