Отличается ли Ubuntu от Linux на Mac? Извините, если это основной вопрос... Я новичок в этом. Я пытаюсь запустить сценарий bash, который создает сценарий .sh из некоторых файлов FASTQ. Это работает в терминале на Mac OS. Я пытаюсь запустить его на своем ноутбуке с Windows, и он игнорирует экранирование #s и просто заявляет, что несколько команд не найдены. я пытался использовать dos2unix
и дважды проверил с кот -A файл.sh
но это не помогло.
Код, который я пытаюсь запустить, берет все файлы fastq в папке и создает файл .sh для отправки заданий SLURM, используя их имя файла (необходим для компьютерного кластера моего университета, и мне нужно создать более 100 сценариев заданий). Итак, версия Mac OS выглядит следующим образом:
для ФАЙЛА в *fastq; # изменить тип файла при необходимости (например, fasta, fastq, fastq.gz)
сделать эхо -е \
\#\!/бин/баш \
\n\#SBATCH --partition=nonpre \# Раздел \(очередь заданий\) \
\n\#SBATCH --requeue \# Вернуть задание в очередь, если оно было вытеснено \
\n\#SBATCH --job-name=samples \# Назначьте короткое имя вашей работе \
\n\#SBATCH --nodes=1 \# Требуемое количество узлов \
\n\#SBATCH --ntasks=1 \# Всего \# задач по всем узлам \
\n\#SBATCH --cpus-per-task=64 \# ядер на задачу \(\>1 для многопоточных задач\) \
\n\#SBATCH --mem=180000 \# Реальная память \(ОЗУ\) требуется \(МБ\) \
\n\#SBATCH --time=72:00:00 \# Общее ограничение времени выполнения \(ЧЧ:ММ:СС\) \
\n\#SBATCH --output=slurm.%N.${FILE}.out \# Выходной файл STDOUT \
\n\#SBATCH --error=slurm.%N.${FILE}.err \# Выходной файл STDERR \(необязательно\) \
\n\
\n\#ДОБАВЬТЕ ЛЮБОЙ КОД, КОТОРЫЙ ВЫ ХОТИТЕ ЗДЕСЬ, В КАЧЕСТВЕ ЗАЯВКИ НА РАБОТУ SLURM \
\n\
\nsacct --format=JobID,JobName,NTasks,NNodes,NCPUS,MaxRSS,AveRSS,AveCPU,Elapsed,ExitCode -j \$SLURM_JOBID \#получит статистику выполнения задания из SLURM\; используйте их, чтобы обозначить память будущих представлений \
> ${ФАЙЛ}.sh;
сделано
При запуске этого в Windows я получаю:
Slurm_Generator.sh: строка 13: #!/bin/bash: Нет такого файла или каталога
Slurm_Generator.sh: строка 14: \n#SBATCH: команда не найдена
Slurm_Generator.sh: строка 16: \n#SBATCH: команда не найдена
Slurm_Generator.sh: строка 18: \n#SBATCH: команда не найдена
Slurm_Generator.sh: строка 20: \n#SBATCH: команда не найдена
Slurm_Generator.sh: строка 22: \n#SBATCH: команда не найдена
Slurm_Generator.sh: строка 24: \n#SBATCH: команда не найдена
Slurm_Generator.sh: строка 26: \n#SBATCH: команда не найдена
Slurm_Generator.sh: строка 28: \n#SBATCH: команда не найдена
Slurm_Generator.sh: строка 30: \n#SBATCH: команда не найдена
Slurm_Generator.sh: строка 32: \n#SBATCH: команда не найдена
Slurm_Generator.sh: строка 35: \n: команда не найдена
Slurm_Generator.sh: строка 36: \n#ADD: команда не найдена
Slurm_Generator.sh: строка 39: \n: команда не найдена
Slurm_Generator.sh: строка 40: \nsacct: команда не найдена
Мы будем признательны за любую помощь и некоторые пояснения о том, в чем разница между Ubuntu в Windows и терминалом в Mac. Я пытался исследовать это, но я продолжаю находить предлагаемый код без объяснения причин или это не особенно моя проблема. Спасибо!
Изменить: я пытался запустить chmod +x script.sh
и я получу вышеуказанные ошибки. Я неправильно запускаю «эхо»? Даже бег:
'для ФАЙЛА в *fastq;
делать
эхо -е
Привет;
сделано'
говорит Команда «привет» не найдена
Редактировать: Запуск «bash file.sh» дает следующее:
Баш-файл.sh
дает следующее (для каждого из 5 файлов .fastq в моем каталоге):
Slurm_Generator.sh: строка 8: #!/bin/bash: Нет такого файла или каталога
Slurm_Generator.sh: строка 9: \n#SBATCH: команда не найдена
Slurm_Generator.sh: строка 11: \n#SBATCH: команда не найдена
Slurm_Generator.sh: строка 13: \n#SBATCH: команда не найдена
Slurm_Generator.sh: строка 15: \n#SBATCH: команда не найдена
Slurm_Generator.sh: строка 17: \n#SBATCH: команда не найдена
Slurm_Generator.sh: строка 19: \n#SBATCH: команда не найдена
Slurm_Generator.sh: строка 21: \n#SBATCH: команда не найдена
Slurm_Generator.sh: строка 23: \n#SBATCH: команда не найдена
Slurm_Generator.sh: строка 25: \n#SBATCH: команда не найдена
Slurm_Generator.sh: строка 27: \n#SBATCH: команда не найдена
Slurm_Generator.sh: строка 30: \n: команда не найдена
Slurm_Generator.sh: строка 31: \n#ADD: команда не найдена
Slurm_Generator.sh: строка 34: \n: команда не найдена
Slurm_Generator.sh: строка 35: \nsacct: команда не найдена
Если я побегу кот -A файл.sh
я вижу $
в конце каждой строки. Даже если я избавлюсь от них, я получу тот же результат, что и выше.
Бег ls -al script.sh
дано: -rwxrwxrwx 1 цербер цербер 1209 16 июня 00:17 Slurm_Generator.sh
Редактировать:
Я изменил свой сценарий на:
#! /бин/баш
для ФАЙЛА в *fastq; # изменить тип файла при необходимости (например, fasta, fastq, fastq.gz)
сделать эхо -е \
"
#\!/бин/баш
#SBATCH --partition=nonpre # Раздел (очередь заданий)
#SBATCH --requeue # Вернуть задание в очередь, если оно было вытеснено
#SBATCH --job-name=samples # Назначьте короткое имя вашей работе
#SBATCH --nodes=1 # Необходимое количество узлов
#SBATCH --ntasks=1 # Всего # задач на всех узлах
#SBATCH --cpus-per-task=64 # Количество ядер на задачу (>1 для многопоточных задач)
#SBATCH --mem=180000 # Требуемая реальная память (ОЗУ) (МБ)
#SBATCH --time=72:00:00 # Общее ограничение времени выполнения (ЧЧ:ММ:СС)
#SBATCH --output=slurm.%N.${FILE}.out # Выходной файл STDOUT
#SBATCH --error=slurm.%N.${FILE}.err # Выходной файл STDERR (необязательно)
# ДОБАВЬТЕ ЛЮБОЙ КОД, КОТОРЫЙ ВЫ ХОТИТЕ ЗДЕСЬ, В КАЧЕСТВЕ ЗАЯВКИ НА РАБОТУ SLURM \
sacct --format=JobID,JobName,NTasks,NNodes,NCPUS,MaxRSS,AveRSS,AveCPU,Elapsed,ExitCode -j \$SLURM_JOBID \#это позволит получить статистику выполнения задания из SLURM\; используйте их, чтобы обозначить память будущих subm$" \
> ${ФАЙЛ}.sh;
сделано
Мой новый вывод выглядит следующим образом (что намного лучше):
#\!/бин/баш
#SBATCH --partition=nonpre # Раздел (очередь заданий)
#SBATCH --requeue # Вернуть задание в очередь, если оно было вытеснено
#SBATCH --job-name=samples # Назначьте короткое имя вашей работе
#SBATCH --nodes=1 # Необходимое количество узлов
#SBATCH --ntasks=1 # Всего # задач на всех узлах
#SBATCH --cpus-per-task=64 # Количество ядер на задачу (>1 для многопоточных задач)
#SBATCH --mem=180000 # Требуемая реальная память (ОЗУ) (МБ)
#SBATCH --time=72:00:00 # Общее ограничение времени выполнения (ЧЧ:ММ:СС)
#SBATCH --output=slurm.%N.Sample1.fastq.out # Выходной файл STDOUT
#SBATCH --error=slurm.%N.Sample1.fastq.er # Выходной файл STDERR (необязательно)
# ДОБАВЬТЕ ЛЮБОЙ КОД, КОТОРЫЙ ВЫ ХОТИТЕ ЗДЕСЬ, В КАЧЕСТВЕ ЗАЯВКИ НА РАБОТУ SLURM
sacct --format=JobID,JobName,NTasks,NNodes,NCPUS,MaxRSS,AveRSS,AveCPU,Elapsed,ExitCode -j $SLURM_JOBID \#это позволит получить статистику выполнения задания из SLURM\; используйте их, чтобы обозначить память будущих представлений
Единственная проблема, с которой я сталкиваюсь, заключается в том, что, хотя он печатает это для каждого файла .fastq, чего я и хочу, результирующие файлы .sh, которые он записывает, пусты. Таким образом, это не признание > ${Файл}.sh
часть сценария.
Спасибо всем!