gpt4 book ai didi

linux - 在不更改目录的情况下重定向程序输出

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:40:58 25 4
gpt4 key购买 nike

问题

我正在编写一组脚本来帮助在集群上自动执行批处理作业。我拥有的具体内容是一个 $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 权限,并且导致数千次以上的任意挂载似乎是一个有问题的选择。
  • 复制/硬/软链接(soft link):这可能是我必须使用的解决方案:实际上将 ./ 的全部内容复制到 ./$OUTPUT_DIR
  • cd $OUTPUT_DIR; ../$COMMAND :如果 $COMMAND 曾经读取过文件则失败
  • 管道:只有在$COMMAND 不直接处理文件时才有效;它通常这样做

我是否缺少其他解决方案,或者这个请求实际上是不可能的?

[编辑:]选择的解决方案

我打算将目录中的每个对象符号链接(symbolic link)到输出目录,然后从那里运行命令。这有创建大量符号链接(symbolic link)的缺点,但应该不会太糟糕。

最佳答案

如果不对 $COMMAND 的接口(interface)做一些假设,就无法解决这个问题.对于“输出以 $OUTPUT_DIR 结尾”的含义,没有单一的定义。对于一个程序来说,这可能是一些文件,但另一个程序可能只是将一些东西打印到标准输出,而另一个程序可能会尝试使用某种协议(protocol)通过互联网发送一些数据或在 GUI 中显示一些东西,并且没有一种明显的方法来映射所有这些这些“输出到 $OUTPUT_DIR”。

因此,您需要发明一些假设并要求任何 $COMMAND执行以遵循它们。然后,它可能会变得像请求命令接受一个参数一样简单,例如 --target=<DIR>。 .如果您的命令是一些简单的命令,您将必须围绕它创建一个包装器脚本以将该参数转换为应用程序接受的内容。 cp , mv还有一些实用程序已经接受参数 --target ,所以这可能是一个很好的起点。

关于linux - 在不更改目录的情况下重定向程序输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10596936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com