2017-10-09 53 views
0

我正在編寫一個腳本,目標是生成大量的其他腳本。我正在使用一個for循環,它回顯我想要的每個腳本的代碼的文本,然後將其轉換爲.sh文件。這裏是我寫的:回顯到一個.sh文件

#!/bin/bash 


for i in {1..30} ; do 

echo 

"#!/bin/bash 
#$ -N DT_STAR_$i 
#$ -l mem_free=200G 
#$ -pe openmp 4 
#$ -q bio,abio,pub8i 

module load STAR/2.5.2a 


STAR --genomeDir /dfs1/bio/dtatarak/indexes/STAR_Index --readFilesIn 
DT_$i.read1.fastq DT_$i.read2.fastq --runThreadN 4 --outFileNamePrefix 
/David_data1/DT_$i" > DT_STAR_map_$i.sh 


done 

基本上我想要它做的就是把裏面的'代碼,所有的線路,並把它們變成一個新的sh文件每次換水DT_i到DT_1,DT_2, DT_3等等,當我在終端中運行這個腳本時,它確實創建了所有的.sh文件,但是並沒有放入任何東西。並將引號的內容打印到屏幕上,並顯示「No such file or directory」消息。我不確定我做錯了什麼。有沒有更好的方法來實現我想要做的事情?

謝謝!

回答

3

您無法啓動字符串以在與echo命令本身不同的行上回顯。 echo行末尾的換行符結束該命令,然後將該字符串視爲自己要執行的命令。但是沒有這個名字的命令,所以你得到一個錯誤。

此外,您不能像現在那樣跨越多行分割STAR命令。

for i in {1..30} ; do 

echo "#!/bin/bash 
#$ -N DT_STAR_$i 
#$ -l mem_free=200G 
#$ -pe openmp 4 
#$ -q bio,abio,pub8i 

module load STAR/2.5.2a 

STAR --genomeDir /dfs1/bio/dtatarak/indexes/STAR_Index --readFilesIn DT_$i.read1.fastq DT_$i.read2.fastq --runThreadN 4 --outFileNamePrefix /David_data1/DT_$i" > DT_STAR_map_$i.sh 

done 

一個更常見的寫多行的方法是使用here-doc。

for i in {1..30} ; do 

cat <<EOF > DT_STAR_map_$i.sh 
#!/bin/bash 
#$ -N DT_STAR_$i 
#$ -l mem_free=200G 
#$ -pe openmp 4 
#$ -q bio,abio,pub8i 

module load STAR/2.5.2a 

STAR --genomeDir /dfs1/bio/dtatarak/indexes/STAR_Index --readFilesIn DT_$i.read1.fastq DT_$i.read2.fastq --runThreadN 4 --outFileNamePrefix /David_data1/DT_$i 
EOF 

done 
+0

STAR命令本身在我的代碼中寫成一行。我對這個網站的格式不熟悉,這就是爲什麼它在我的文章中以這種方式結束了。我不知道有關新命令中斷的echo命令。謝謝,我會試試看! –

+0

這很棒!謝謝我沒有意識到echo語法的這一方面。 –

+0

您不知道該命令是否在行尾結束? – Barmar