Điểm:1

Tập lệnh Bash không hoạt động trong Ubuntu trong Windows 10

lá cờ ke

Ubuntu có khác với Linux trên máy Mac không? Xin lỗi nếu đây là một câu hỏi cơ bản ... Tôi chưa quen với điều này. Tôi đang cố chạy tập lệnh bash để tạo tập lệnh .sh từ một số tệp FASTQ. Điều này hoạt động trong thiết bị đầu cuối trên Mac OS. Tôi đang cố chạy nó trên máy tính xách tay Windows của mình và nó bỏ qua việc thoát #s của tôi và chỉ nói rằng không tìm thấy một số lệnh. tôi đã thử sử dụng dos2unix và kiểm tra lại với con mèo -A file.sh nhưng nó đã không giúp được gì.

Mã tôi đang cố chạy sẽ lấy tất cả các tệp fastq trong một thư mục và tạo tệp .sh để gửi công việc SLURM bằng tên tệp của chúng (cần thiết cho cụm máy tính của trường đại học của tôi và tôi cần tạo hơn 100 tập lệnh công việc). Vì vậy, phiên bản Mac OS như sau:

cho TỆP trong *fastq; #thay đổi loại tệp khi cần (ví dụ: fasta, fastq, fastq.gz)
làm tiếng vang -e \
\#\!/bin/bash \
\n\#SBATCH --partition=nonpre \# Phân vùng \(hàng đợi công việc\) \
\n\#SBATCH --requeue \# Đưa công việc trở lại hàng đợi nếu được ưu tiên \
\n\#SBATCH --job-name=samples \# Chỉ định tên ngắn cho công việc của bạn \
\n\#SBATCH --nodes=1 \# Số nút bạn yêu cầu \
\n\#SBATCH --nt task=1 \# Tổng số \# nhiệm vụ trên tất cả các nút \
\n\#SBATCH --cpus-per-task=64 \# Số lõi mỗi tác vụ \(\>1 nếu tác vụ đa luồng\) \
\n\#SBATCH --mem=180000 \# Yêu cầu bộ nhớ thực \(RAM\) \(MB\) \
\n\#SBATCH --time=72:00:00 \# Tổng giới hạn thời gian chạy \(HH:MM:SS\) \
\n\#SBATCH --output=slurm.%N.${FILE}.out \# Tệp đầu ra STDOUT \
\n\#SBATCH --error=slurm.%N.${FILE}.err \# Tệp đầu ra STDERR \(tùy chọn\) \
\N \
\n\#THÊM BẤT KỲ MÃ NÀO BẠN MUỐN VÀO ĐÂY KHI NỘP CÔNG VIỆC SLURM CỦA BẠN \
\N \
\nsacct --format=JobID,JobName,NTasks,NNodes,NCPUS,MaxRSS,AveRSS,AveCPU,Elapsed,ExitCode -j \$SLURM_JOBID \#điều này sẽ nhận số liệu thống kê chạy công việc từ SLURM\; sử dụng những thứ này để giúp chỉ định bộ nhớ của các lần gửi trong tương lai \
> ${FILE}.sh; 
xong

Khi chạy cái này trên Windows, tôi nhận được:

Slurm_Generator.sh: dòng 13: #!/bin/bash: Không có tệp hoặc thư mục như vậy
Slurm_Generator.sh: dòng 14: \n#SBATCH: không tìm thấy lệnh
Slurm_Generator.sh: dòng 16: \n#SBATCH: không tìm thấy lệnh
Slurm_Generator.sh: dòng 18: \n#SBATCH: không tìm thấy lệnh
Slurm_Generator.sh: dòng 20: \n#SBATCH: không tìm thấy lệnh
Slurm_Generator.sh: dòng 22: \n#SBATCH: không tìm thấy lệnh
Slurm_Generator.sh: dòng 24: \n#SBATCH: không tìm thấy lệnh
Slurm_Generator.sh: dòng 26: \n#SBATCH: không tìm thấy lệnh
Slurm_Generator.sh: dòng 28: \n#SBATCH: không tìm thấy lệnh
Slurm_Generator.sh: dòng 30: \n#SBATCH: không tìm thấy lệnh
Slurm_Generator.sh: dòng 32: \n#SBATCH: không tìm thấy lệnh
Slurm_Generator.sh: dòng 35: \n: không tìm thấy lệnh
Slurm_Generator.sh: dòng 36: \n#ADD: không tìm thấy lệnh
Slurm_Generator.sh: dòng 39: \n: không tìm thấy lệnh
Slurm_Generator.sh: dòng 40: \nsacct: không tìm thấy lệnh

Mọi trợ giúp sẽ được đánh giá cao và một số giải thích về sự khác biệt giữa Ubuntu trên Windows so với Terminal trên Mac. Tôi đã thử nghiên cứu vấn đề này nhưng tôi vẫn tìm thấy mã được đề xuất mà không có lời giải thích hoặc đó không phải là vấn đề đặc biệt của tôi. Cảm ơn bạn!

Chỉnh sửa: Tôi đã thử chạy chmod +x script.sh và tôi sẽ nhận được các lỗi trên. Tôi đang chạy 'echo' sai? Thậm chí chạy: 'đối với TẬP TIN trong *fastq; làm tiếng vang -e xin chào; xong' nói Không tìm thấy lệnh 'xin chào'

Chỉnh sửa: Chạy 'bash file.sh' mang lại kết quả như sau: tập tin bash.sh mang lại kết quả như sau (cho mỗi trong số 5 tệp .fastq trong directoy của tôi):

Slurm_Generator.sh: dòng 8: #!/bin/bash: Không có tệp hoặc thư mục như vậy
Slurm_Generator.sh: dòng 9: \n#SBATCH: không tìm thấy lệnh
Slurm_Generator.sh: dòng 11: \n#SBATCH: không tìm thấy lệnh
Slurm_Generator.sh: dòng 13: \n#SBATCH: không tìm thấy lệnh
Slurm_Generator.sh: dòng 15: \n#SBATCH: không tìm thấy lệnh
Slurm_Generator.sh: dòng 17: \n#SBATCH: không tìm thấy lệnh
Slurm_Generator.sh: dòng 19: \n#SBATCH: không tìm thấy lệnh
Slurm_Generator.sh: dòng 21: \n#SBATCH: không tìm thấy lệnh
Slurm_Generator.sh: dòng 23: \n#SBATCH: không tìm thấy lệnh
Slurm_Generator.sh: dòng 25: \n#SBATCH: không tìm thấy lệnh
Slurm_Generator.sh: dòng 27: \n#SBATCH: không tìm thấy lệnh
Slurm_Generator.sh: dòng 30: \n: không tìm thấy lệnh
Slurm_Generator.sh: dòng 31: \n#ADD: không tìm thấy lệnh
Slurm_Generator.sh: dòng 34: \n: không tìm thấy lệnh
Slurm_Generator.sh: dòng 35: \nsacct: không tìm thấy lệnh

nếu tôi chạy con mèo -A file.sh tôi thấy một $ ở cuối mỗi dòng. Ngay cả khi tôi loại bỏ những thứ này, tôi vẫn nhận được kết quả như trên. Đang chạy ls -al script.sh đưa ra: -rwxrwxrwx 1 cerberus cerberus 1209 ngày 16 tháng 6 00:17 Slurm_Generator.sh

Chỉnh sửa: Tôi đã thay đổi tập lệnh của mình thành:

#! /bin/bash
cho TỆP trong *fastq; #thay đổi loại tệp khi cần (ví dụ: fasta, fastq, fastq.gz)
làm tiếng vang -e \
"
#\!/bin/bash
#SBATCH --partition=nonpre # Phân vùng (hàng đợi công việc)
#SBATCH --requeue # Đưa công việc trở lại hàng đợi nếu được ưu tiên
#SBATCH --job-name=samples # Đặt tên ngắn cho công việc của bạn
#SBATCH --nodes=1 # Số nút bạn yêu cầu
#SBATCH --ntasks=1 # Tổng số nhiệm vụ trên tất cả các nút
#SBATCH --cpus-per-task=64 # Số lõi mỗi tác vụ (>1 nếu tác vụ đa luồng)
#SBATCH --mem=180000 # Yêu cầu bộ nhớ thực (RAM) (MB)
#SBATCH --time=72:00:00 # Tổng giới hạn thời gian chạy (HH:MM:SS)
#SBATCH --output=slurm.%N.${FILE}.out # Tệp đầu ra STDOUT
#SBATCH --error=slurm.%N.${FILE}.err # Tệp đầu ra STDERR (tùy chọn)

#THÊM BẤT KỲ MÃ NÀO BẠN MUỐN Ở ĐÂY NHƯ NỘP CÔNG VIỆC SLURM CỦA BẠN \

sacct --format=JobID,JobName,NTasks,NNodes,NCPUS,MaxRSS,AveRSS,AveCPU,Elapsed,ExitCode -j \$SLURM_JOBID \#điều này sẽ nhận số liệu thống kê chạy công việc từ SLURM\; sử dụng những thứ này để giúp chỉ định bộ nhớ của subm$ trong tương lai" \
> ${FILE}.sh;
xong

Đầu ra mới của tôi là như sau (tốt hơn nhiều):

#\!/bin/bash
#SBATCH --partition=nonpre # Phân vùng (hàng đợi công việc)
#SBATCH --requeue # Đưa công việc trở lại hàng đợi nếu được ưu tiên
#SBATCH --job-name=samples # Đặt tên ngắn cho công việc của bạn
#SBATCH --nodes=1 # Số nút bạn yêu cầu
#SBATCH --ntasks=1 # Tổng số nhiệm vụ trên tất cả các nút
#SBATCH --cpus-per-task=64 # Số lõi mỗi tác vụ (>1 nếu tác vụ đa luồng)
#SBATCH --mem=180000 # Yêu cầu bộ nhớ thực (RAM) (MB)
#SBATCH --time=72:00:00 # Tổng giới hạn thời gian chạy (HH:MM:SS)
#SBATCH --output=slurm.%N.Sample1.fastq.out # Tệp đầu ra STDOUT
#SBATCH --error=slurm.%N.Sample1.fastq.er # Tệp đầu ra STDERR (tùy chọn)


#THÊM BẤT KỲ MÃ NÀO BẠN MUỐN Ở ĐÂY NHƯ NỘP CÔNG VIỆC SLURM CỦA BẠN

sacct --format=JobID,JobName,NTasks,NNodes,NCPUS,MaxRSS,AveRSS,AveCPU,Elapsed,ExitCode -j $SLURM_JOBID \#điều này sẽ nhận số liệu thống kê chạy công việc từ SLURM\; sử dụng những thứ này để giúp chỉ định bộ nhớ của các lần gửi trong tương lai

Vấn đề duy nhất mà tôi đang gặp phải là trong khi nó in ra điều này cho từng tệp .fastq, đó là điều tôi muốn, thì các tệp .sh kết quả mà nó ghi ra lại trống. Vì vậy, nó không nhận ra > ${Tệp}.sh một phần của kịch bản.

Cảm ơn mọi người!

Karlom avatar
lá cờ de
Có thể `/bin/bash` không có trong đường dẫn thiết bị đầu cuối Ubuntu của bạn. Bạn có thể kiểm tra điều này bằng lệnh `env`. Hãy thử thêm `#! /bin/bash` vào phần đầu của tập lệnh. Lưu nó và thực hiện lại.
waltinator avatar
lá cờ it
Luôn dán tập lệnh của bạn vào `https://shellcheck.net`, trình kiểm tra cú pháp hoặc cài đặt `shellcheck` cục bộ. Hãy biến việc sử dụng `shellcheck` thành một phần trong quy trình phát triển của bạn.
Justin avatar
lá cờ ke
@Karlom Thật không may, điều đó không hiệu quả. Tôi đã thử `#! /bin/bash` cũng như `#! /bin/sh` và tôi có thể gọi `bash` từ đường dẫn của mình.
Karlom avatar
lá cờ de
Bạn đang cố chạy tập lệnh như thế nào? lỗi gì bạn nhận được? Có lẽ bạn không được phép thực thi tệp cụ thể đó? hãy thử `chmod +x file.sh` và nếu nó ổn thì hãy chạy `bash file.sh` và nếu bạn vẫn gặp lỗi, hãy đăng câu hỏi đó vào câu hỏi của bạn.
Justin avatar
lá cờ ke
@Karlom Tôi đã thử nhưng nó mang lại kết quả tương tự. Tôi đang chạy echo sai? Có cú pháp nào khác trong Ubuntu dành cho Windows so với Mac không? Tôi đã thử sử dụng nó bằng cách lặp lại văn bản có và không có dấu ngoặc kép nhưng nó chỉ nghĩ rằng bất cứ điều gì xuất hiện sau `echo` là một lệnh thay vì văn bản.
Karlom avatar
lá cờ de
@Justin, Ubuntu với tư cách là một máy ảo trên Windows không khác với Ubuntu độc lập. Để xem có gì sai, trong thiết bị đầu cuối Ubuntu shell, hãy chuyển đến thư mục chứa `file.sh`, sau đó chạy `bash file.sh` và sao chép lỗi mà bạn nhận được vào đây. Ngoài ra, sẽ hữu ích nếu bạn đăng đầu ra của `ls -al file.sh` trong khi bạn đang ở trong thiết bị đầu cuối trong đường dẫn chứa file.sh.
Justin avatar
lá cờ ke
@Karlom Tôi vừa đăng kết quả của tất cả những điều đó; xin lỗi nếu bất kỳ thông tin nào trong số này là thông tin tôi nên cung cấp!
Karlom avatar
lá cờ de
Scrpit cho biết `SBATCH: lệnh không tìm thấy`. Vì vậy, có vẻ như bạn đang cố chạy tập lệnh Windows trên Linux và không thể tìm thấy lệnh đó. Xin lưu ý rằng việc chạy `dos2unix` không tự động làm cho tập lệnh Windows của bạn có thể thực thi được trong Linux.
Justin avatar
lá cờ ke
Có, nhưng SBATCH nên được bình luận, phải không? sử dụng `echo -e` sẽ giúp `\n` và `\#` tạo các dòng mới và nhận được nhận xét tương ứng, phải không? Hay là cú pháp của tôi sai? Nó hoạt động tốt khi tôi làm điều này trong Mac Terminal. Tôi chỉ không thể tìm ra kịch bản của mình sai ở đâu.
Nate T avatar
lá cờ it
@Karlom Bạn cũng có thể kiểm tra bằng ` which bash`. Trong Ubuntu, wsl hay không, điều này là đủ, tôi nghĩ vậy.
Điểm:1
lá cờ cn

Sử dụng heredoc thay thế:

cho TỆP trong *fastq; #thay đổi loại tệp khi cần (ví dụ: fasta, fastq, fastq.gz)
làm

con mèo <<-EOF > ${FILE}.sh
#!/bin/bash

#SBATCH --partition=nonpre # Phân vùng (hàng đợi công việc)
#SBATCH --requeue # Đưa công việc trở lại hàng đợi nếu được ưu tiên
#SBATCH --job-name=samples # Đặt tên ngắn cho công việc của bạn
#SBATCH --nodes=1 # Số nút bạn yêu cầu
#SBATCH --ntasks=1 # Tổng số nhiệm vụ trên tất cả các nút
#SBATCH --cpus-per-task=64 # Số lõi mỗi tác vụ (>1 nếu tác vụ đa luồng)
#SBATCH --mem=180000 # Yêu cầu bộ nhớ thực (RAM) (MB)
#SBATCH --time=72:00:00 # Tổng giới hạn thời gian chạy (HH:MM:SS)
#SBATCH --output=slurm.%N.${FILE}.out # Tệp đầu ra STDOUT
#SBATCH --error=slurm.%N.${FILE}.err # Tệp đầu ra STDERR (tùy chọn)

#THÊM BẤT KỲ MÃ NÀO BẠN MUỐN Ở ĐÂY NHƯ NỘP CÔNG VIỆC SLURM CỦA BẠN

nsacct --format=JobID,JobName,NTasks,NNodes,NCPUS,MaxRSS,AveRSS,AveCPU,Elapsed,ExitCode -j \$SLURM_JOBID #điều này sẽ nhận số liệu thống kê chạy công việc từ SLURM; sử dụng những thứ này để giúp chỉ định bộ nhớ của các lần gửi trong tương lai
EOF

xong
Điểm:0
lá cờ ke

Tôi nhận ra rằng tôi phải thêm một \ trước > ${Tệp}.sh. Vì vậy, câu trả lời là:

#! /bin/bash
cho TỆP trong *fastq; #thay đổi loại tệp khi cần (ví dụ: fasta, fastq, fastq.gz)
làm tiếng vang -e \
"
#\!/bin/bash
#SBATCH --partition=nonpre # Phân vùng (hàng đợi công việc)
#SBATCH --requeue # Đưa công việc trở lại hàng đợi nếu được ưu tiên
#SBATCH --job-name=samples # Đặt tên ngắn cho công việc của bạn
#SBATCH --nodes=1 # Số nút bạn yêu cầu
#SBATCH --ntasks=1 # Tổng số nhiệm vụ trên tất cả các nút
#SBATCH --cpus-per-task=64 # Số lõi mỗi tác vụ (>1 nếu tác vụ đa luồng)
#SBATCH --mem=180000 # Yêu cầu bộ nhớ thực (RAM) (MB)
#SBATCH --time=72:00:00 # Tổng giới hạn thời gian chạy (HH:MM:SS)
#SBATCH --output=slurm.%N.${FILE}.out # Tệp đầu ra STDOUT
#SBATCH --error=slurm.%N.${FILE}.err # Tệp đầu ra STDERR (tùy chọn)

#THÊM BẤT KỲ MÃ NÀO BẠN MUỐN Ở ĐÂY NHƯ NỘP CÔNG VIỆC SLURM CỦA BẠN \

sacct --format=JobID,JobName,NTasks,NNodes,NCPUS,MaxRSS,AveRSS,AveCPU,Elapsed,ExitCode -j \$SLURM_JOBID \#điều này sẽ nhận số liệu thống kê chạy công việc từ SLURM\; sử dụng những thứ này để giúp chỉ định bộ nhớ của subm$ trong tương lai" \
> ${FILE}.sh;
xong
NotTheDr01ds avatar
lá cờ vn
Thật tốt khi biết bạn đã giải quyết xong. Hãy nhớ "Chấp nhận" câu trả lời của bạn để câu hỏi này được đánh dấu là đã giải quyết. Những câu hỏi chưa được giải quyết sẽ tự động xuất hiện hàng tháng hoặc hàng năm sau đó trong nỗ lực cố gắng thu hút câu trả lời. Cảm ơn!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.