gpt4 book ai didi

terminal - tcsh - 命令后立即保存历史记录

转载 作者:行者123 更新时间:2023-12-02 20:15:23 24 4
gpt4 key购买 nike

我尝试在每次输入命令后将历史记录保存在 tcsh 中,而不是在“退出”命令后保存它。这是因为我通常会同时打开大约 10 个选项卡,之后我只是关闭终端窗口,而不是在每个选项卡中键入“exit”。结果是仅保存最后一个选项卡的历史记录。当我关闭终端窗口时,此解决方案不起作用:https://stackoverflow.com/a/3577709/2773143 .

因为我发现仅使用历史命令没有解决方案,所以我尝试通过不同的方式解决它:直接将每个命令回显到 ~/.tcsh_history 并在中设置 set histfile= ~/.tcsh_history .tcshrc 文件。但是我也没有找到一种方法来做到这一点。我考虑过在 .alias 中为所有命令添加一个别名,例如 alias * '*; ~/someScript.tcsh (还有许多其他版本)但它不起作用。我找到了如何通过对每个命令使用不同的别名来使其工作,但它有点难看。
例如:
别名 cd 'cd\!*; ~/saveHist.tcsh\!:0\!*'
别名 grep 'grep\!*; ~/saveHist.tcsh\!:0\!*'
(等)
并在 ~/saveHist.tcsh 文件中:

#!/bin/tcsh -f

echo "$argv" >> ~/.tcsh_history

但是当然这有点难看,这样关闭窗口后一些命令将在 ~/.tcsh_history 中写入两次。

有什么想法吗?

最佳答案

要在输入每个 shell 命令后自动运行命令,请将命令设置为 postcmd 别名。例如:

alias postcmd 'date'

...将导致“date”命令在您输入命令后立即运行(尽管据我所知,它实际上是在您输入的命令之前执行的)。

而且,正如马克·阿姆斯特朗在回答中提到的那样,history -S 保存当前历史记录。所以,理论上,你可以把

alias postcmd 'history -S'

...在您的 .tcshrc 中,每次输入命令时都会保存您的历史文件 - 因此无需为您可能使用的每个命令创建别名,或使用某些自定义脚本手动写入历史文件.

(编辑:不管下面写了什么,上面的行现在可以在 macOS 上运行,至少可以在与 MacPorts 一起安装的 tcsh 上运行。)

我说这在理论上是有效的,因为当我尝试它时(因为当我在关闭终端窗口之前忘记退出时,我的历史记录也被吹走了......),.history 文件被写入即使在 savehist 变量中指定了 merge,也只能使用当前 shell 的历史记录 - 非常令人沮丧。但也许你的系统表现不同(我使用的是 OS X),所以也许可以尝试一下。

关于terminal - tcsh - 命令后立即保存历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22894794/

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