Este Ubuntu diferit de Linux pe un Mac? Îmi pare rău dacă aceasta este o întrebare de bază... Sunt nou în acest sens. Încerc să rulez un script bash care creează un script .sh din unele fișiere FASTQ. Acest lucru funcționează în terminalul unui Mac OS. Încerc să-l rulez pe laptopul meu Windows și ignoră evadarea mea de #s și afirmă doar că mai multe comenzi nu sunt găsite. Am incercat sa folosesc dos2unix
și verificat de două ori cu pisică -Un fișier.sh
dar nu a ajutat.
Codul pe care încerc să-l rulez preia toate fișierele fastq dintr-un folder și creează un fișier .sh pentru trimiterile de joburi SLURM folosind numele fișierului (necesar pentru clusterul de computere al universității mele și trebuie să fac peste 100 de scripturi de job). Deci versiunea Mac OS este următoarea:
pentru FILE în *fastq; #schimbați tipul fișierului când este necesar (de exemplu, fasta, fastq, fastq.gz)
face eco -e \
\#\!/bin/bash \
\n\#SBATCH --partition=nonpre \# Partiție \(coada de joburi\) \
\n\#SBATCH --requeue \# Returnează jobul în coadă dacă este preemptat \
\n\#SBATCH --job-name=samples \# Atribuiți un nume scurt jobului dvs. \
\n\#SBATCH --nodes=1 \# Numărul de noduri de care aveți nevoie \
\n\#SBATCH --ntasks=1 \# Total \# de sarcini pe toate nodurile \
\n\#SBATCH --cpus-per-task=64 \# Cores per task \(\>1 dacă sarcini multithread\) \
\n\#SBATCH --mem=180000 \# Memorie reală \(RAM\) necesară \(MB\) \
\n\#SBATCH --time=72:00:00 \# Limită de timp totală de rulare \(HH:MM:SS\) \
\n\#SBATCH --output=slurm.%N.${FILE}.out \# fișier de ieșire STDOUT \
\n\#SBATCH --error=slurm.%N.${FILE}.err \# Fișier de ieșire STDERR \(opțional\) \
\n \
\n\#ADĂUGAȚI Orice COD DORIȚI AICI CA PRESENTAREA DVS. DE LUCRARE SLURM \
\n \
\nsacct --format=JobID,JobName,NTasks,NNodes,NCPUS,MaxRSS,AveRSS,AveCPU,Elapsed,ExitCode -j \$SLURM_JOBID \#acest lucru va primi statistici de rulare a jobului de la SLURM\; utilizați-le pentru a ajuta la desemnarea memoriei trimiterilor viitoare \
> ${FILE}.sh;
Terminat
Când rulez asta pe Windows, primesc:
Slurm_Generator.sh: linia 13: #!/bin/bash: Nu există un astfel de fișier sau director
Slurm_Generator.sh: linia 14: \n#SBATCH: comanda nu a fost găsită
Slurm_Generator.sh: linia 16: \n#SBATCH: comanda nu a fost găsită
Slurm_Generator.sh: linia 18: \n#SBATCH: comanda nu a fost găsită
Slurm_Generator.sh: linia 20: \n#SBATCH: comanda nu a fost găsită
Slurm_Generator.sh: linia 22: \n#SBATCH: comanda nu a fost găsită
Slurm_Generator.sh: linia 24: \n#SBATCH: comanda nu a fost găsită
Slurm_Generator.sh: linia 26: \n#SBATCH: comanda nu a fost găsită
Slurm_Generator.sh: linia 28: \n#SBATCH: comanda nu a fost găsită
Slurm_Generator.sh: linia 30: \n#SBATCH: comanda nu a fost găsită
Slurm_Generator.sh: linia 32: \n#SBATCH: comanda nu a fost găsită
Slurm_Generator.sh: linia 35: \n: comanda nu a fost găsită
Slurm_Generator.sh: linia 36: \n#ADD: comanda nu a fost găsită
Slurm_Generator.sh: linia 39: \n: comanda nu a fost găsită
Slurm_Generator.sh: linia 40: \nsacct: comanda nu a fost găsită
Orice ajutor ar fi apreciat și câteva explicații despre care este diferența dintre Ubuntu pe Windows și Terminalul pe Mac. Am încercat să cercetez acest lucru, dar continui să găsesc codul sugerat fără nicio explicație sau nu este problema mea în mod special. Mulțumesc!
Edit: Am încercat să alerg chmod +x script.sh
și voi primi erorile de mai sus. Am greșit „echo”? Chiar și alergare:
'pentru FILE în *fastq;
do
ecou -e
Buna ziua;
Terminat'
spune Comanda „bună ziua” nu a fost găsită
Editare: rularea „bash file.sh” produce următoarele:
fișier bash.sh
produce următoarele (pentru fiecare dintre cele 5 fișiere .fastq din directorul meu):
Slurm_Generator.sh: linia 8: #!/bin/bash: Nu există un astfel de fișier sau director
Slurm_Generator.sh: linia 9: \n#SBATCH: comanda nu a fost găsită
Slurm_Generator.sh: linia 11: \n#SBATCH: comanda nu a fost găsită
Slurm_Generator.sh: linia 13: \n#SBATCH: comanda nu a fost găsită
Slurm_Generator.sh: linia 15: \n#SBATCH: comanda nu a fost găsită
Slurm_Generator.sh: linia 17: \n#SBATCH: comanda nu a fost găsită
Slurm_Generator.sh: linia 19: \n#SBATCH: comanda nu a fost găsită
Slurm_Generator.sh: linia 21: \n#SBATCH: comanda nu a fost găsită
Slurm_Generator.sh: linia 23: \n#SBATCH: comanda nu a fost găsită
Slurm_Generator.sh: linia 25: \n#SBATCH: comanda nu a fost găsită
Slurm_Generator.sh: linia 27: \n#SBATCH: comanda nu a fost găsită
Slurm_Generator.sh: linia 30: \n: comanda nu a fost găsită
Slurm_Generator.sh: linia 31: \n#ADD: comanda nu a fost găsită
Slurm_Generator.sh: linia 34: \n: comanda nu a fost găsită
Slurm_Generator.sh: linia 35: \nsacct: comanda nu a fost găsită
Dacă fug pisică -Un fișier.sh
văd o $
la sfârșitul fiecărei rânduri. Chiar dacă scap de acestea, obțin același rezultat ca mai sus.
Alergare ls -al script.sh
dat: -rwxrwxrwx 1 cerberus cerberus 1209 16 iunie 00:17 Slurm_Generator.sh
Editați | ×:
Mi-am schimbat scriptul în:
#! /bin/bash
pentru FILE în *fastq; #schimbați tipul fișierului când este necesar (de exemplu, fasta, fastq, fastq.gz)
face eco -e \
"
#\!/bin/bash
#SBATCH --partition=nonpre # Partiție (coada de joburi)
#SBATCH --requeue # Returnează jobul în coadă dacă este preemptat
#SBATCH --job-name=samples # Atribuiți un nume scurt jobului dvs
#SBATCH --nodes=1 # Numărul de noduri de care aveți nevoie
#SBATCH --ntasks=1 # Nr. total de sarcini pe toate nodurile
#SBATCH --cpus-per-task=64 # nuclee per sarcină (>1 dacă sarcini multithread)
#SBATCH --mem=180000 # Memorie reală (RAM) necesară (MB)
#SBATCH --time=72:00:00 # Limită totală de timp de rulare (HH:MM:SS)
#SBATCH --output=slurm.%N.${FILE}.out # fișier de ieșire STDOUT
#SBATCH --error=slurm.%N.${FILE}.err # fișier de ieșire STDERR (opțional)
#ADĂUGAȚI Orice COD DORIȚI AICI CA PRESENTAREA DVS. DE LUCRARE SLURM \
sacct --format=JobID,JobName,NTasks,NNodes,NCPUS,MaxRSS,AveRSS,AveCPU,Elapsed,ExitCode -j \$SLURM_JOBID \#acest lucru va primi statistici de rulare a jobului de la SLURM\; folosiți-le pentru a ajuta la desemnarea memoriei viitoarei subm$" \
> ${FILE}.sh;
Terminat
Noua mea ieșire este următoarea (care este mult mai bună):
#\!/bin/bash
#SBATCH --partition=nonpre # Partiție (coada de joburi)
#SBATCH --requeue # Returnează jobul în coadă dacă este preemptat
#SBATCH --job-name=samples # Atribuiți un nume scurt jobului dvs
#SBATCH --nodes=1 # Numărul de noduri de care aveți nevoie
#SBATCH --ntasks=1 # Nr. total de sarcini pe toate nodurile
#SBATCH --cpus-per-task=64 # nuclee per sarcină (>1 dacă sarcini multithread)
#SBATCH --mem=180000 # Memorie reală (RAM) necesară (MB)
#SBATCH --time=72:00:00 # Limită totală de timp de rulare (HH:MM:SS)
#SBATCH --output=slurm.%N.Sample1.fastq.out # fișier de ieșire STDOUT
#SBATCH --error=slurm.%N.Sample1.fastq.er # fișier de ieșire STDERR (opțional)
#ADĂUGAȚI Orice COD DORIȚI AICI CA PREZENTAREA DVS. DE SLURM
sacct --format=JobID,JobName,NTasks,NNodes,NCPUS,MaxRSS,AveRSS,AveCPU,Elapsed,ExitCode -j $SLURM_JOBID \#acest lucru va primi statistici de rulare a jobului de la SLURM\; utilizați-le pentru a ajuta la desemnarea memoriei trimiterilor viitoare
Singura problemă cu care mă confrunt este că, în timp ce imprimă acest lucru pentru fiecare fișier .fastq, ceea ce vreau, fișierele .sh rezultate pe care le scrie sunt goale. Deci nu este recunoașterea > ${Fișier}.sh
parte a scenariului.
Vă mulțumesc tuturor!