问题
我正在编写一组脚本来帮助在集群上自动执行批处理作业。我所拥有的具体事物是一个$OUTPUT_DIR
,并且是一个任意的$COMMAND
。
我想执行$COMMAND
它的输出以$OUTPUT_DIR
. 例如,如果COMMAND='cp ./foo ./bar; mv ./bar ./baz'
,我想运行它以使最终结果等于cp ./foo ./$OUTPUT_DIR/baz
。理想情况下,解决方案看起来像eval PWD="./$OUTPUT_DIR" $COMMAND
,但这不起作用。
已知解决方案
[还有他们的问题]
- 编辑
$COMMAND
:在大多数情况下,该命令将是一个脚本,或一个编译的 C 或 FORTRAN 可执行文件。改变这些的内部结构不是一种选择。 - unionfs、aufs 等:虽然这基本上是完美的,但运行它的用户不会有 root,并且导致数千次任意挂载似乎是一个值得商榷的选择。
- 复制/硬/软链接:这可能是我必须使用的解决方案:实际上将整个内容复制
./
到./$OUTPUT_DIR
cd $OUTPUT_DIR; ../$COMMAND
$COMMAND
:读取文件失败- 管道:仅在
$COMMAND
不直接处理文件时才有效;它通常会这样做
是否有我缺少的另一种解决方案,或者这个请求实际上是不可能的?
[编辑:]选择的解决方案
我打算将目录中的每个对象符号链接到输出目录,然后从那里运行命令。这有创建大量符号链接的缺点,但应该不会太糟糕。