"/bin/bash -l" Неверная опция

Ну, я пытаюсь запустить серийные задания MPI, замаскированные как одно задание на нашем суперкомпьютере. Основное представление script в основном выглядит следующим образом:

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

Каждый 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

И иногда я сталкиваюсь с ошибкой для каждого sub.script(задания сразу умирают):

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

Самое интересное, что это случайная ошибка, означающая, что если я запустил тот же script для второго (или третьего и т.д.) времени, он будет работать без каких-либо проблем. Иногда мне повезло, иногда я не... Удаление -l не поможет, потому что в этом случае модули не могут быть загружены, а mpirun не будет работать. Любые предложения по его исправлению?

Большое спасибо!

Ответ 1

У вас script, вероятно, есть символы, которые вы не видите. Возможно, это было копирование/вставка с использованием неправильного перевода набора символов или в формате DOS. В последнем случае вы можете использовать пакет tofrodos или dos2unix для исправления.

В любом случае вы можете потянуть его в "vi" или в другом приложении, которое обычно показывает странные символы, такие как ^ @или ^ M. Вы можете попробовать cat -v filename, который может помочь увидеть эти странности. Push нажимает try hexdump (или hd, или od).

Ответ 2

Я только что столкнулся с этим, и у меня были неправильные окончания строки. Я изменил с CRLF на LF, и это исправило!