shell可以指向程序放置输出文件的位置吗?

时间:2014-03-10 17:43:06

标签: bash shell

shell可以覆盖输出文件的放置位置吗? (不是控制台/屏幕输出,而是由程序创建的文件。)我有一个脚本,当前通过程序运行一系列输入文件,每个脚本都会生成许多不同的输出文件。

for i in `seq 1 24`
do 
../Bin/myprog inputfile.$i.in
done

有没有办法为每次运行程序创建新目录,并将相应的输出文件放在每个目录中?所以我会得到dir1: <output files from run 1>; dir2 <output files from run 2>等等。我想有一种方法就是编写另一个脚本来创建目录并在程序运行后对所有文件进行排序,但是有更优雅的方法吗?

2 个答案:

答案 0 :(得分:1)

正如评论中所建议的那样,假设您的程序只是将输出转储到当前工作目录中,这可能就是您所需要的。

for i in `seq 1 24`
do 
  mkdir $i
  pushd $i
  ../../Bin/myprog ../inputfile.$i.in
  popd
done

答案 1 :(得分:1)

如果您尝试更改现有程序(例如myprog)写入其文件的位置,则仅当程序将其文件 relative 写入当前目录时才可以执行此操作。在这种情况下,调用myprog的外部脚本可以在调用chdir之前为其创建“目标”目录并myprog

如果myprog程序写入绝对路径,例如/var/tmp/myprog.tmp,则覆盖写入实际所在的唯一方法是在连接到所需目标的绝对路径上放置符号链接。这仅在程序(myprog)在写入之前不首先删除现有文件时才有效。

指导绝对文件路径写入的第三个也是最极端的可能性是创建一个chroot'ed文件系统,其中将包含myprog输出文件,之后外部脚本可以复制或者将它们移动到他们想要的地方。

总结一下:除了更改源代码,设置相对路径输出文件的工作目录,或chroot绝对路径文件的文件系统之外,确实没有“优雅”的方法来替换实际的程序中使用的输出文件。