"/ bin/bash -l"无效选项

Eof*_*fet 15 bash

好吧,我试图在我们的超级计算机上运行作为一个工作掩盖的串行MPI工作.主提交脚本基本上看起来像这样:

#!/bin/bash -l
#PBS -l nodes=4:ppn=8,walltime=24:00:00

cat $PBS_NODEFILE | uniq | tr '\\012' ' ' > tmp-$PBS_JOBID
read -a NODE < tmp-$PBS_JOBID
rm tmp-$PBS_JOBID

inode=-1
ijob=0

for ((K=1;K<=8;K++))
do
        [ $((ijob++ % 2)) -eq 0 ] && ((inode++))
        ssh ${NODE[inode]} _somepath_/RUN$K/sub.script &
done
wait
exit 0
Run Code Online (Sandbox Code Playgroud)

每个sub.script看起来像:

#!/bin/bash -l
#PBS -l walltime=24:00:00,nodes=1:ppn=4

module load intel
module load ompi
export FORT_BUFFERED=1

*run executable* 

wait
exit 0
Run Code Online (Sandbox Code Playgroud)

有时我会遇到每个sub.script的错误(作业立即死亡):

/bin/bash: -
: invalid option
Usage:  /bin/bash [GNU long option] [option] ...
        /bin/bash [GNU long option] [option] script-file ...
*etc.*
Run Code Online (Sandbox Code Playgroud)

最有趣的是它是一个随机错误意味着如果我在第二个(或第三个等)时间运行相同的脚本它将运行没有任何问题.有时我很幸运,有时我不是......删除-l将无济于事,因为在这种情况下模块无法加载,mpirun将无法正常工作.任何建议如何解决?

非常感谢提前!

cog*_*mos 19

您的脚本可能包含您无法看到的字符.也许是使用错误的字符集翻译进行复制/粘贴或者是DOS格式.对于后者,您可以使用tofrodos或dos2unix包进行更正.

在任何一种情况下,你都可以在'vi'或其他应用程序中提取它,这些应用程序通常会显示奇怪的字符,如^ @或^ M. 你可以尝试cat -v filename哪些可能有助于看到这些奇怪的事情.推动尝试hexdump(或高清,或od).

  • 哦,非常感谢!它们确实是DOS格式的。但是对我来说奇怪的是,有时候他们有用,有时却没有。随你.. (2认同)

小智 11

我刚刚遇到这个问题,并且行结尾无效。我从 CRLF 更改为 LF 并且修复了它!