运行历史命令时自动更正路径?

运行历史命令时自动更正路径?

我执行递归搜索以查找几天前执行的命令,并且我想运行它。然而,该命令应该从我之前运行它的路径运行,而不是我当前所在的路径。

是否可以zsh解决这个问题并将命令更改为完整路径并从我当前的路径运行?或者也许分叉一个进程切换到原始路径运行它然后返回?

答案1

执行该命令的原始目录不会记录在历史记录中。

您可以设置一个钩子,当您尝试执行的命令名称未找到时执行:command_not_found_handler。但除非你对当时的工作有一个很好的了解,否则这不会让你走得太远。

相关阅读:zsh 历史记录 - 完整路径;我可以让我的 shell 历史记录记录通配符的扩展方式吗?

答案2

在大多数情况下,这实际上是一种不受欢迎的行为。通常,当我重新运行命令时,专门是为了在当前上下文中运行它们。运行历史命令并让它作用于当前文件夹以外的其他内容甚至可能会产生意想不到的副作用。

我建议采取不同的方法。首先确定需要从某个位置专门执行哪些命令,然后问自己为什么它们是这样的,并使用标准模式修复它们。

  • 如果他们需要从与可执行文件相关的路径中的资源加载库,请修复它们,以便他们知道在哪里可以使用dirname和 之类的东西找到这些资源$0

  • 如果他们需要数据,请考虑向他们传递参数,以显示在哪里可以找到不相关的数据,以便可以重复使用它们。

  • 如果您无法修复问题的根源,请考虑编写小型 shell 函数或包装器脚本,以独立于系统上发生的任何因素来设置可执行文件的环境。

相关内容