#python #linux #bash #shell
Вопрос:
У меня есть код на python, скажем так test.py. Мне нужно запустить его с помощью Slurm в удаленном месте. Вот почему я пытаюсь создать файл .sh.
В замазке я делаю это:
touch main.sh
echo #!/bin/bash > main.sh
....
echo #SBATCH --gres=gpu:1 >> main.sh
....
echo python3 train.py >> main.sh
Затем я делаю его исполняемым с помощью
chmod u x main.sh
И я пытаюсь запустить его с помощью
bash main.sh
Но я получаю эту ошибку:
sbatch: error: This does not look like a batch script. The first
sbatch: error: line must start with #! followed by the path to an interpreter.
sbatch: error: For instance: #!/bin/sh
Как я пытаюсь проверить
file main.sh
Я получаю
main.sh: ASCII text
Я новичок в bash. Поэтому я не могу понять, в чем проблема. Кто-нибудь может помочь?
Комментарии:
1.
#
является маркером комментария оболочки, поэтому командаecho #!/bin/bash > main.sh
обрабатывается какecho
с комментарием#!/bin/bash > main.sh
… и, конечно же, часть комментариев игнорируется. Поэтому вам нужно процитировать или избежать#
. В зависимости от того, какую оболочку вы используете и в каком режиме она находится,!
также может быть специальный символ (даже в двойных кавычках!). Поэтому безопаснее всего просто заключать всю строку в одинарные кавычки.2. @KhabbabZakaria: В зависимости от того, как вы настраиваете свой bash,
echo #!/bin/bash
при вызове в командной строке будет записываться #!/bin/bash в stdout, в то время как при вызове в сценарии (или по-другому настроенном) тот же оператор просто выведет символ новой строки. Google для интерактивных комментариев , чтобы получить больше информации по этой теме.
Ответ №1:
Единственная разница в том, что я использовал одинарные кавычки
touch main.sh
echo '#!/bin/bash' > main.sh
echo '#SBATCH --gres=gpu:1' >> main.sh
echo 'python3 --version' >> main.sh
echo 'python3 /home/Desktop/train.py' >> main.sh
Если train.py находится в другом каталоге, вам нужно будет указать местоположение