【发布时间】:2015-12-15 16:42:10
【问题描述】:
我正在编写一个 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 的内容。我认为这会起作用:
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
如何根据变量创建目录,然后在循环中将文件保存到这些目录?
以下是可能相关或不相关的详细信息列表:
- 文件 pt2.lst 是使用 bash 脚本生成的。每行包含一个 4-5 位数字
- 我打算通过在循环中运行多个脚本来将多个文件保存到每个新创建的目录中;为简单起见,我只包含了一个
- BASH 脚本使用单个必需参数 $1 运行,该参数用作许多脚本命令的输入文件
【问题讨论】:
-
作业中没有空格:
STR="Sample_$p";_是一个有效的标识符字符,$p_vaf不是变量,请使用${p}_vaf或$p\_vaf或"$p"_vaf或其他。