Bash shell能否指示程序将输出文件放置在何处?

Bash shell能否指示程序将输出文件放置在何处?,bash,shell,Bash,Shell,shell能否覆盖输出文件的放置位置?(不是控制台/屏幕输出,而是由程序创建的文件。)我有一个脚本,当前通过一个程序运行一系列输入文件,每个脚本生成许多不同的输出文件 for i in `seq 1 24` do ../Bin/myprog inputfile.$i.in done 是否有方法为程序的每次运行创建新目录,并将相应的输出文件放在每个目录中?所以我会得到dir1:;dir2等等。我想一种方法是在程序运行后编写另一个脚本来创建目录并对所有文件进行排序,但是有没有更优雅的方法呢?正如

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

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

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

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

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

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

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

指导绝对文件路径写入的第三种也是最极端的可能性是创建
chroot
文件系统,其中将包含
myprog
输出文件,之后外部脚本可以将它们复制或移动到所需的位置


总而言之:除了更改源代码、为相对路径输出文件设置工作目录,或者为绝对路径文件设置文件系统之外,实际上没有“优雅”之分替换程序中使用的实际输出文件的方法。

没有,除了您已经配置的方法之外,没有其他优雅的方法。对于每次运行,创建目录
dir$i
,并将文件放在那里。您的程序在其手册页中列出了哪些选项?它是否总是以独占方式创建新文件,是否可以附加?如果后者是真的,一些符号链接可能会起作用?除非程序有一个选项来指定文件的放置位置,否则很可能只是将它们放在当前工作目录中。在调用程序之前,使用
cd
pushd
更改到所需的输出目录。是的,程序将文件写入当前工作目录,并且没有更改文件写入位置的选项。