Ubuntu แตกต่างจาก Linux บน Mac หรือไม่ ขออภัยหากนี่เป็นคำถามพื้นฐาน...ฉันยังใหม่กับสิ่งนี้ ฉันกำลังพยายามเรียกใช้สคริปต์ทุบตีที่สร้างสคริปต์ .sh จากไฟล์ FASTQ บางไฟล์ ใช้งานได้ในเทอร์มินัลบน Mac OS ฉันกำลังพยายามรันบนแล็ปท็อป Windows ของฉัน และมันไม่สนใจการ Escape ของ #s และแจ้งว่าไม่พบคำสั่งหลายคำสั่ง ฉันได้ลองใช้ ดอส2ยูนิกซ์
และตรวจสอบซ้ำกับ cat -A file.sh
แต่มันไม่ได้ช่วย
โค้ดที่ฉันพยายามรันใช้ไฟล์ fastq ทั้งหมดในโฟลเดอร์ และสร้างไฟล์ .sh สำหรับการส่งงาน SLURM โดยใช้ชื่อไฟล์ (จำเป็นสำหรับคลัสเตอร์คอมพิวเตอร์ของมหาวิทยาลัยของฉัน และฉันต้องสร้างสคริปต์งานมากกว่า 100 รายการ) ดังนั้นเวอร์ชันของ Mac OS จะเป็นดังนี้:
สำหรับ FILE ใน *fastq; #เปลี่ยนประเภทไฟล์เมื่อจำเป็น (เช่น fasta, fastq, fastq.gz)
ทำ echo -e \
\#\!/bin/ทุบตี \
\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 \# หน่วยความจำจริง \(RAM\) จำเป็น \(MB\) \
\n\#SBATCH --time=72:00:00 \# ขีดจำกัดเวลารันทั้งหมด \(HH:MM:SS\) \
\n\#SBATCH --output=slurm.%N.${FILE}.out \# ไฟล์เอาต์พุต STDOUT \
\n\#SBATCH --error=slurm.%N.${FILE}.err \# ไฟล์เอาต์พุต STDERR \(ทางเลือก\) \
\n \
\n\#เพิ่มรหัสใดก็ได้ที่คุณต้องการที่นี่เป็นการส่งงานแบบสลึมสลือ \
\n \
\nsacct --format=JobID,JobName,NTasks,NNodes,NCPUS,MaxRSS,AveRSS,AveCPU,Elapsed,ExitCode -j \$SLURM_JOBID \#นี่จะรับสถิติการเรียกใช้งานจาก SLURM\; ใช้สิ่งเหล่านี้เพื่อช่วยกำหนดความทรงจำของการส่งในอนาคต \
> ${FILE}.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 กับ Terminal บน Mac ฉันได้ลองค้นคว้าสิ่งนี้แล้ว แต่ฉันยังคงค้นหาโค้ดที่แนะนำโดยไม่มีคำอธิบายหรือไม่ใช่ปัญหาของฉันโดยเฉพาะ ขอขอบคุณ!
แก้ไข: ฉันพยายามวิ่ง chmod +x script.sh
และฉันจะได้รับข้อผิดพลาดข้างต้น ฉันเรียกใช้ 'echo' ผิดหรือไม่ แม้จะวิ่ง:
'สำหรับไฟล์ใน *fastq;
ทำ
เสียงสะท้อน -e
สวัสดี;
เสร็จแล้ว'
พูดว่า ไม่พบคำสั่ง 'สวัสดี'
แก้ไข: การรัน 'bash file.sh' ให้ผลลัพธ์ต่อไปนี้:
ทุบตี file.sh
ให้ผลต่อไปนี้ (สำหรับแต่ละไฟล์ .fastq 5 ไฟล์ในไดเรคทอยของฉัน):
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: ไม่พบคำสั่ง
ถ้าฉันวิ่ง cat -A file.sh
ฉันเห็นก $
ในตอนท้ายของแต่ละบรรทัด แม้ว่าฉันจะกำจัดสิ่งเหล่านี้ออกไป ฉันก็ยังได้รับผลลัพธ์เช่นเดียวกับข้างต้น
วิ่ง ls -al script.sh
ให้: -rwxrwxrwx 1 cerberus cerberus 1209 16 มิ.ย. 00:17 Slurm_Generator.sh
แก้ไข:
ฉันเปลี่ยนสคริปต์เป็น:
#! /ถัง/ทุบตี
สำหรับ FILE ใน *fastq; #เปลี่ยนประเภทไฟล์เมื่อจำเป็น (เช่น fasta, fastq, fastq.gz)
ทำ echo -e \
"
#\!/bin/bash
#SBATCH --partition=nonpre # พาร์ติชัน (คิวงาน)
#SBATCH --requeue # ส่งคืนงานไปยังคิวหากมีการจองไว้
#SBATCH --job-name=samples # กำหนดชื่อย่อให้กับงานของคุณ
#SBATCH --nodes=1 # จำนวนโหนดที่คุณต้องการ
#SBATCH --ntasks=1 # รวม # ของงานในทุกโหนด
#SBATCH --cpus-per-task=64 # Cores ต่องาน (>1 ถ้างานมัลติเธรด)
#SBATCH --mem=180000 # ต้องการหน่วยความจำจริง (RAM) (MB)
#SBATCH --time=72:00:00 # ขีดจำกัดเวลารันทั้งหมด (HH:MM:SS)
#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$ ในอนาคต" \
> ${FILE}.sh;
เสร็จแล้ว
ผลลัพธ์ใหม่ของฉันมีดังต่อไปนี้ (ซึ่งดีกว่ามาก):
#\!/bin/bash
#SBATCH --partition=nonpre # พาร์ติชัน (คิวงาน)
#SBATCH --requeue # ส่งคืนงานไปยังคิวหากมีการจองไว้
#SBATCH --job-name=samples # กำหนดชื่อย่อให้กับงานของคุณ
#SBATCH --nodes=1 # จำนวนโหนดที่คุณต้องการ
#SBATCH --ntasks=1 # รวม # ของงานในทุกโหนด
#SBATCH --cpus-per-task=64 # Cores ต่องาน (>1 ถ้างานมัลติเธรด)
#SBATCH --mem=180000 # ต้องการหน่วยความจำจริง (RAM) (MB)
#SBATCH --time=72:00:00 # ขีดจำกัดเวลารันทั้งหมด (HH:MM:SS)
#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
ส่วนหนึ่งของสคริปต์
ขอบคุณทุกคน!