【问题标题】:watch has no access to function defined in .zshrcwatch 无法访问 .zshrc 中定义的函数
【发布时间】:2020-10-16 13:57:06
【问题描述】:

我在.zshrc 中定义了一个函数,例如:

function foo {
  echo bar
}

我可以自己运行这个函数:

$ foo
bar

但我不能使用watch 来运行它:

$ watch foo
sh: 1: foo: not found

This SO answer 展示了如何使用 Bash:

$ watch -x bash foo

但这似乎不适用于 zsh。

如何使用watch 运行我的用户定义函数?

【问题讨论】:

标签: terminal zsh


【解决方案1】:

试试这个:

$ watch -x zsh -ic foo
  • zsh - 外壳。这就是您使用 zsh 函数的方式。
  • -i - 互动。 ~/.zshrc 仅用于交互式 shell。
  • -c - 表示 foo 是一个命令,而不是要读入的 shell 脚本文件。
  • watch -x - 让手表使用 exec 而不是 sh -c (man page)。稍微减少了所涉及的进程数。

如果在此处使用交互式 shell 会导致问题,您可以将您的函数移至 ~/.zshenv。那么你就不需要-i 选项了,因为~/.zshenv 是交互式shell 和shell scripts 的来源。

【讨论】:

    【解决方案2】:

    Shell 函数是 Shell 内部的,因此外部程序自然不能使用它们。在这种情况下调用 shell 函数的一种通用方法是使用zsh -c 'ZSH_CODE_HERE'

    【讨论】:

    • 有没有一个公式可以使这个工作与watch一起工作?
    猜你喜欢
    • 2021-01-21
    • 1970-01-01
    • 2020-10-13
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    相关资源
    最近更新 更多