问题
我正在编写一组脚本来帮助在集群上自动执行批处理作业。我所拥有的具体事物是一个$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不直接处理文件时才有效;它通常会这样做
是否有我缺少的另一种解决方案,或者这个请求实际上是不可能的?
[编辑:]选择的解决方案
我打算将目录中的每个对象符号链接到输出目录,然后从那里运行命令。这有创建大量符号链接的缺点,但应该不会太糟糕。