我正在编写一个BASH脚本,它循环遍历列表文件pt2.lst的内容,运行一个Perl脚本并使用基于pt2.lst内容的文件名保存输出。 以下代码工作:
while read p; do perl Collect_Vaf.pl $1 $p > "$p_vaf.lst" done < pt2.lst
…只是因为Perl脚本使用第二个命令行参数来命名打印到的文件。 运行上面的脚本“perl Collect_Vaf.pl $ 1 $ p”也可以在这种情况下工作。
我不想将文件保存在脚本运行的同一目录中,而是想根据pt2.lst的内容创build名称为新的目录。 我认为这将工作:
while read p; do STR = "Sample_$p" mkdir $STR perl Collect_Vaf.pl $1 $p > "$STR/$p_vaf.lst" done < pt2.lst
但是这给了我循环的每个迭代的以下三个错误消息:
Vaf_Plotter.sh: line 11: STR: command not found usage: mkdir [-pv] [-m mode] directory ... Vaf_Plotter.sh: line 13: /.lst: Permission denied
如何创build基于variables的目录,然后将文件保存到循环中的所有目录?
以下是可能相关或不相关的详细信息列表:
去除赋值运算符周围的空格。 那就是,而不是这个:
STR = "Sample_$p"
你必须这样写:
STR="Sample_$p"
另一个问题在这里:
perl Collect_Vaf.pl $1 $p > "$STR/$p_vaf.lst"
应该:
perl Collect_Vaf.pl $1 $p > "$STR/${p}_vaf.lst"
因为根据你的错误信息,没有名为$p_vaf
变量。 这也意味着,当你描述你的第一个例子是“它的工作”,当然这是不正确的。