echo到.sh文件中

时间:2017-10-09 22:27:54

标签: bash shell

我正在编写一个脚本,目的是生成大量其他脚本。我正在使用for循环,它回显了每个脚本所需的代码文本然后>它进入.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

基本上我想要它做的是在''中使用所有代码行,并在每次将DT_i更改为DT_1,DT_2,DT_3等时将它们放入新的.sh文件中。终端,它确实生成了所有.sh文件,但没有放入任何内容。它将引号的内容打印到我的屏幕,并显示消息“没有这样的文件或目录”。我不确定我做错了什么。有没有更好的方法来实现我想要做的事情?

谢谢!

1 个答案:

答案 0 :(得分: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