gpt4 book ai didi

bash - 历史扩展在 .zshrc 函数中不起作用

转载 作者:行者123 更新时间:2023-11-29 09:50:55 34 4
gpt4 key购买 nike

我创建了一个函数 clip,通过首先重新运行它来将最后一个命令的输出复制到剪贴板。

#copy previous output to clipboard
function clip(){
echo $(!!) | pbcopy
}

当我在终端中运行函数中包含的单行时,它运行良好。但是,如果我尝试将它保存为我的 .zshrc 中的函数并通过调用 clip 执行它,我会收到以下错误:

zsh: command not found: !!

我无法让自动扩展正常工作,如有任何帮助,我们将不胜感激。

最佳答案

clip () {
fc -ILe- | pbcopy
}

说明:

!! 的历史扩展只有在交互式命令行中输入时才有效。它不会在脚本中工作,因为 !! 没有以特殊方式处理(导致“找不到命令”错误)。

相反,您可以使用 fc 命令从历史记录中检索元素。

运行不带任何参数的 fc 将检索最后一个历史事件并打开一个包含该事件的编辑器进行编辑。关闭编辑器将运行编辑后的命令(不保存编辑将导致执行原始命令)。

上述示例中的参数将按如下方式修改行为:

  • -I:只获取内部历史事件,即排除从$HISTFILE加载的事件。
  • -L:仅检索本地历史事件,不包括通过 SHARE_HISTORY 从其他 session 共享的元素。 (这可能不需要与-I结合使用,但我没有测试过)
  • -e ename:使用ename 作为编辑器而不是默认编辑器。如果 ename 设置为 -,则不会打开任何编辑器。

-I-L 不是绝对必要的,但它们可以防止您无意中运行在以前的某个 shell session 中最后键入的命令。这很可能是 rm -r *poweroff

所以组合 fc -ILe- | pbcopy 将检索输入到当前 shell session 中的最后一个命令,并将其输出通过管道传输到 pbcopy

顺便说一句:您可以只使用 cmd1 | cmd2 而不是 echo $(cmd1) | cmd2 以便能够将 cmd1 的输出传输到 cmd2

关于bash - 历史扩展在 .zshrc 函数中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45089356/

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