我正在编写一个BASH脚本,它循环遍历列表文件pt2.lst的内容,运行Perl脚本并使用基于pt2.lst内容的文件名保存输出。以下代码有效:
while read p; do
perl Collect_Vaf.pl $1 $p > "$p_vaf.lst"
done < pt2.lst
...但仅仅因为Perl脚本使用第二个命令行参数来命名它打印到的文件。将上面的脚本运行为&#34; perl Collect_Vaf.pl $ 1 $ p&#34;也适用于这种情况。
我希望创建一个名称基于pt2.lst内容的新目录,而不是将文件保存在运行脚本的同一目录中。我认为这样可行:
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
如何根据变量创建目录,然后将文件保存到循环内的所有目录中?
以下是可能相关或不相关的详细信息列表:
答案 0 :(得分:3)
删除赋值运算符周围的空格。也就是说,而不是:
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
的变量。这也意味着,当你将第一个例子描述为“它有效”时,大多数情况下都不是这样。