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

标签 bash

好吧,我正在尝试在我们的 super 计算机上将串行 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

每个子脚本看起来像:

#!/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

有时我会遇到每个子脚本的错误(作业立即死亡):

/bin/bash: -
: invalid option
Usage:  /bin/bash [GNU long option] [option] ...
        /bin/bash [GNU long option] [option] script-file ...
*etc.*

最有趣的是,这是一个随机错误,这意味着如果我第二次(或第三次等)运行相同的脚本,它将毫无问题地运行。有时我很幸运,有时我不是......删除 -l 不会有帮助,因为在那种情况下无法加载模块并且 mpirun 将无法工作。有什么解决方法的建议吗?

提前致谢!

最佳答案

您的脚本中可能包含您看不到的字符。也许它是使用错误的字符集转换复制/粘贴的,或者是 DOS 格式的。如果是后者,您可以使用 tofrodos 或 dos2unix 包进行更正。

在任何一种情况下,您都可以在“vi”或其他通常会显示怪异字符(如 ^@ 或 ^M)的应用程序中将其调出。您可以尝试 cat -v filename 这可能有助于查看这些异常情况。推到推尝试 hexdump(或 hd,或 od)。

关于bash - "/bin/bash -l"无效选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17136273/

相关文章:

regex - 使用正则表达式解析 bash 中的分隔数组

bash - 从日志文件中删除控制/特殊字符

linux - 使用选项 -D -R SessionName 时的 screen 消息 "Must be connected to a terminal"

linux - 整数表达式预期错误。

macos - Applescript 从同一目录运行 bash 脚本

Bash 导出多个函数

linux - 如何在启动时运行 TeamSpeak3 服务器?

linux - 如何在 linux 中使用 xmlstarlet 从 xml 中获取值

linux - 在一个目录中查找不在另一个目录中的文件

linux - 在 Linux 中替换大文本字符串