bash - Chapel Gasnet 在寻找匹配的 `' 时出现意外的 EOF '

标签 bash syntax-error environment-variables chapel gasnet

使用 Chapel 1.13.1、Gasnet 1.26.4、Fedora 24 版

尝试运行 hello6-taskpar-dist.chpl ,产生错误:

login_node> ./a.out -nl 1 
bash: -c: line 0: unexpected EOF while looking for matching `'' 
bash: -c: line 1: syntax error: unexpected end of file
connection to work_node1 failed. 
Terminated

我的理解是gasnet将登录节点的环境导出到工作节点,并且一些格式错误的定义导致了这个问题(即这是一个环境错误)。

不幸的是,我不确定在执行 chapel 二进制文件期间正在执行哪些脚本,并且我发现很难追踪不良事件发生的地点和时间。
不幸的是,我曾经通过取消设置模块功能( unset module )解决了这个问题,但现在该修复不再有效:
login_node> unset module
login_node> ./a.out -nl 1
bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `  cd '/home/me/TestCode/Chapel/gasnet-helloworld' ; env 'AMUDP_SLAVE_ARGS=1,login_node:34413,' './a.out_real' '-nl' '1' '-E' 'MANPATH=/home/me/usr/opt/chapel-gasnet/man:/usr/share/man:/usr/man:/usr/local/man' '-E' 'XDG_SESSION_ID=397' '-E' 'GUESTFISH_INIT=\e[1;34m' '-E' 'HOSTNAME=login_node' '-E' 'HARDWARE_PLATFORM=x86_64' '-E' 'RTE_INCLUDE=/usr/include/dpdk' '-E' 'TERM=xterm-256color' '-E' 'SHELL=/bin/bash' '-E' 'WISECONFIGDIR=/usr/share/wise2/' '-E' 'HISTSIZE=1000' '-E' 'SSH_CLIENT=24.255.27.170 58652 22' '-E' 'LOCALUSR=/home/me/usr' '-E' 'QTDIR=/usr/lib64/qt-3.3' '-E' 'OLDPWD=/home/me/usr/opt/chapel-gasnet' '-E' 'QTINC=/usr/lib64/qt-3.3/include' '-E' 'SSH_TTY=/dev/pts/0' '-E' 'CHPL_COMM=gasnet' '-E' 'ACTIVE_SHELLS=1' '-E' 'LOCALOPT=/home/me/usr/opt' '-E' 'SVN_EDITOR=vim' '-E' 'USER=me' '-E' 'LD_LIBRARY_PATH=/home/me/usr/lib' '-E' 'LS_COLORS=rs=0:di=38;5;33:ln=38;5;51:mh=00:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=01;05;37;41:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;40:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.m4a=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.oga=38;5;45:*.opus=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:' '-E' 'CHPL_HOST_PLATFORM=linux64' '-E' 'LOCALBIN=/home/me/usr/bin' '-E' 'CCACHE_CPP2=' '-E' 'GUESTFISH_PS1=\[\e[1;32m\]><fs>\[\e[0;31m\] ' '-E' 'MAIL=/var/spool/mail/me' '-E' 'PATH=/home/me/usr/opt/chapel-gasnet/bin/linux64:/home/me/usr/opt/chapel-gasnet/util:/home/me/usr/bin:/s/bach/e/proj/rtrt/software/bin:/sbin:/bin:/usr/bin:/usr/local/bin:/usr/bin/X11:/usr/X/bin:/usr/local/java/bin:/s/chopin/f/proj/eclipse:/home/me/usr/opt/atom/bin/' '-E' 'RTE_SDK=/usr/share/dpdk' '-E' 'SSH_SERVERS=work_node1 work_node_2 work_node3' '-E' 'RTE_TARGET=x86_64-default-linuxapp-gcc' '-E' 'PWD=/home/me/TestCode/Chapel/gasnet-helloworld' '-E' 'JAVA_HOME=/usr/lib/jvm/java' '-E' 'XMODIFIERS=@im=none' '-E' 'EDITOR=vim' '-E' 'LANG=en_US.utf8' '-E' 'MODULEPATH=/etc/scl/modulefiles:/usr/share/Modules/modulefiles:/etc/modulefiles:/usr/share/modulefiles' '-E' 'LOADEDMODULES=' '-E' 'KDEDIRS=/usr' '-E' 'GUESTFISH_OUTPUT=\e[0m' '-E' 'S_COLORS=auto' '-E' 'ignoreeof=10' '-E' 'PS1=$ '-E' 'LOCALETC=/home/me/usr/etc' '-E' 'TRASHDIR=/home/me/.local/share/Trash/files' '-E' 'SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass' '-E' 'HISTCONTROL=ignoredups' '-E' 'PS2=> ' '-E' 'TEXINPUTS=~/Documents/LatexLibraries/pgfplots/tex/:~/Documents/LatexLibraries/subfigmat/' '-E' 'CHPL_HOME=/home/me/usr/opt/chapel-gasnet' '-E' 'SHLVL=1' '-E' 'HOME=/home/me' '-E' 'GASNET_SSH_CMD=ssh' '-E' 'LOGNAME=me' '-E' 'GASNET_SSH_OPTIONS=-x -o LogLevel=Error' '-E' 'QTLIB=/usr/lib64/qt-3.3/lib' '-E' 'CVS_RSH=ssh' '-E' 'DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1885/bus' '-E' 'SSH_CONNECTION=some.ip.addr some.ip.addr2' '-E' 'GASNET_SSH_SERVERS=work_node1 work_node_2 work_node3' '-E' 'MODULESHOME=/usr/share/Modules' '-E' 'LESSOPEN=||/usr/bin/lesspipe.sh %s' '-E' 'XDG_RUNTIME_DIR=/run/user/1885' '-E' 'GASNET_SPAWNFN=S' '-E' 'GUESTFISH_RESTORE=\e[0m' '-E' 'CCACHE_HASHDIR=' '-E' 'BASH_FUNC_scl()=() {  local CMD=$1;'
connection to work_node1 failed.
Terminated

(我已经更改了一些潜在的识别信息。用户名、主机名、IP 地址、路径等)

这似乎是 BASH_FUNC_scl功能也是部分原因,但取消设置它会产生相同的错误。

环顾四周,发现this xonsh issue on Github这表明取消设置 scl 和模块都可以解决问题。它没有,但错误返回到简短的“意外 EOF”错误。单独取消设置模块或 scl 并不能解决问题,并且会产生相同的错误。
login_node> unset module
login_node> unset scl
login_node> ./a.out -nl 1
bash: -c: line 0: unexpected EOF while looking for matching `''
bash: -c: line 1: syntax error: unexpected end of file
connection to work_node1 failed.
Terminated

我认为有两种方法可以解决这个问题。
  • 让 Gasnet 不将环境推送到工作节点。当用户登录时,我们的集群已经加载了环境(网络文件系统),因此无需将整个环境推送过来(如有必要,我可以按顺序将内容添加到 rc 或配置文件脚本中) .我最喜欢这个,因为它最大限度地减少了我必须做的工作。不幸的是,我对 Gasnet 或其使用几乎一无所知。
  • 修复环境使得没有不匹配的' , 特点。我不喜欢这个想法,因为它需要大量工作,并且可能意味着要求系统管理员做系统管理员的事情;他们经常不愿意做的事情,尤其是对于小型项目和极端情况,两者兼而有之。

  • 有任何想法吗?

    编辑:
    有人建议我发布我现有的 PS1 和 printchplenv .
    PS1='$HOSTNAME> '
    > printchplenv
    machine info: Linux login_node 4.6.4-301.fc24.x86_64 #1 SMP Tue Jul 12 11:50:00 UTC 2016 x86_64
    CHPL_HOME: /home/me/usr/opt/chapel-gasnet *
    script location: /home/me/usr/opt/chapel-1.13.1_gasnet/util
    CHPL_TARGET_PLATFORM: linux64
    CHPL_TARGET_COMPILER: gnu
    CHPL_TARGET_ARCH: unknown
    CHPL_LOCALE_MODEL: flat
    CHPL_COMM: gasnet *
      CHPL_COMM_SUBSTRATE: udp
      CHPL_GASNET_SEGMENT: everything
    CHPL_TASKS: qthreads
    CHPL_LAUNCHER: amudprun
    CHPL_TIMERS: generic
    CHPL_MEM: jemalloc
    CHPL_MAKE: gmake
    CHPL_ATOMICS: intrinsics
      CHPL_NETWORK_ATOMICS: none
    CHPL_GMP: gmp
    CHPL_HWLOC: hwloc
    CHPL_REGEXP: re2
    CHPL_WIDE_POINTERS: struct
    CHPL_AUX_FILESYS: none
    

    最佳答案

    我怀疑问题是由于启动器代码在遇到您的 PS1 中包含的一些魔法 shell 字符时破坏了环境字符串引起的。 ,比如这些:
    " ' ` * ? [ ] | & < > ; ( ) # $ \
    如果是这种情况,您应该能够通过使用覆盖的 PS1 调用已编译的二进制文件来获得快速修复。值,例如

    PS1="" ./a.out -nl 1
    

    该错误已向 Chapel 团队报告。其实已经有pull request旨在解决问题。

    关于bash - Chapel Gasnet 在寻找匹配的 `' 时出现意外的 EOF ',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39195929/

    相关文章:

    node.js - 如何从 npm 脚本导出 env 变量?

    database - Laravel 4 with forge,环境变量问题

    bash - BASH-将SSH输出分配给变量

    javascript - Uncaught SyntaxError : Unexpected token }, no visible error?

    c# - update into 语句中 Access 数据库语法错误

    bash - Bash脚本错误与cat和if

    node.js - 如何存储开源 Heroku Node.js 应用程序的数据库凭据?

    java - JVM 系统属性 - 如何将其视为字符串文字

    bash - 通过 bash 执行 sqlite 命令

    arrays - 如何按空行将文本文件拆分为数组?