我可以在 Tmux 的状态栏中使用 ZSH 自定义函数的输出吗?

Jos*_*nch 7 zsh tmux

我在 ~/.zshrc 中定义了一个函数:

foo() { print "FOO" }
Run Code Online (Sandbox Code Playgroud)

我想在我的 Tmux 状态栏中输出它。我将此添加到 ~/.tmux.conf 中:

set -g status-right "foo: #(foo)"
Run Code Online (Sandbox Code Playgroud)

但我只看到其中的静态部分;缺少函数输出。(虽然我的实际功能更复杂,但即使对于上面的简单示例也是如此。)

当我调用脚本而不是函数时,它工作正常。有什么不同?是否可以在那里使用函数?

mpy*_*mpy 7

tmux该男子页指出set选项:

#(shell-command) 命令输出的第一行

但我很确定,这并不意味着 shell函数,因为tmux不会shell-command在当前的 shell 会话中执行,而是启动一个新实例,该实例以非交互式方式启动,因此不提供您的~/.zshrc配置,因此不知道关于其中定义的函数。

要解决此问题,您可以创建一个名为的 shell脚本foo

#!/bin/zsh -f

source ~/.zshrc   # or just the desired function to save parsing time
# use some functions defined in ~/.zshrc

print "FOO"
Run Code Online (Sandbox Code Playgroud)