【问题标题】:Shell crashed with [Process completed]Shell 因 [进程完成] 而崩溃
【发布时间】:2012-07-14 06:40:52
【问题描述】:

我正在为 Z-Shell 编辑点文件别名。这是我从 dotfiles repos 中找到的别名。

function gch() {
    git clone git://github.com/$USER/$1.git
}

然后当我去zsh时,运行这样的命令:

gch benhoskings dot-files

我期望发生的是

git clone https://github.com/benhoskings/dot-files

在我运行该命令后,它只输出

[Process completed]

shell 冻结,^C 也不起作用。我启动了一个新的 shell,我所有的 git 命令都被粉碎了,就像我执行 git status 一样,它显示 [Process completed] 并且 shell 运行速度非常慢。

我知道我需要修复别名函数,所以我可以传递两个参数,比如这些

函数 gch() { git clone git://github.com/$1/$2.git }

如何杀死后台运行的进程?它减慢了一切,无法运行任何 git 命令。我通过采购 .zshrc 重新加载 zsh,并尝试重新启动计算机以清除当前会话,但仍然无法摆脱在后台运行的进程。我该如何解决?

【问题讨论】:

  • gch() 函数只接受一个参数;它使用$USER(你的 Unix 用户名)作为 github 帐户的名称,并将其参数作为存储库的名称。 (这似乎是个坏主意;我自己的 Unix 用户名与我的 github 帐户的名称不匹配。)试试gch dot-files。或者绕过该功能并尝试git clone https://github.com/benhoskings/dot-files(对我有用)。
  • 谢谢,基思。该功能用作捷径,我不必使用它。这里真正的问题是如何杀死后台进程?

标签: git terminal zsh


【解决方案1】:

好吧,我已经编辑了多个别名。导致 [Process completed] 的真正问题不是执行的功能。就是我加的这个功能

gls() { 查询="$1" 转移 glog --pickaxe-regex "-S$query" "$@" }

我不知道为什么会导致shell中断,但是我删除了该功能,一切都恢复了正常。当我看到 [Process completed] 错误时,我吓坏了很长时间。嗯,谁能告诉我为什么这个坏了?

或者另一个问题,我从 github 上其他人的 dotfiles 中找到的。有时它使用这种格式:

git_current_branch() { cat "$(git rev-parse --git-dir 2>/dev/null)/HEAD" | sed -e 's/^.*refs\/heads\///' }

有时,它会使用这种格式与 function 关键字:

功能 git_current_branch() { cat "$(git rev-parse --git-dir 2>/dev/null)/HEAD" | sed -e 's/^.*refs\/heads\///' }

它们都有效。这两种格式有什么区别?是你在 CLI 中调用的方式吗?

【讨论】:

  • 对于第一个问题:这个函数定义本身不能破坏任何东西:它只是定义,所以你的问题中缺少一些信息。有一个说明:在zsh中你不需要引用$@,你可以去掉这个函数的所有引号,在它的顶部添加emulate -L zsh(如果你有一些干扰选项)和它应该可以工作(虽然我不知道 WTF 是 glog 所以它可能不会)。对于第二个:两个定义是等价的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2019-12-26
  • 2012-05-28
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多