Shell 命令输出未显示在 tmux 状态中

Shell 命令输出未显示在 tmux 状态中

我有以下内容地位权

set -g status-right "#{prefix_highlight}[wifi:#[fg=brightred]#(wifi_status)#[fg=yellow]|#[fg=brightgreen]#{cpu_icon}#[fg=yellow]:#{cpu_percentage}|#{battery_icon}:#{battery_percentage}:#{battery_remain}] %a %h-%d %H:%M:%S#[default]"

以及其中的自定义 shell 命令无线网络状态

它运行一个函数(无线网络质量)获取 wifi 状态,然后使用火花

wifi_status当我有该文件时,这是有效的/usr/local/bin,但我希望它在我的点文件的版本控制存储库中,因此我将其移动到我的.zsh文件夹中的 bin 文件夹中,并使用 $HOME/.zsh/bin.我可以在 shell 终端(甚至在 tmux 中)中使用该命令,它会显示正确的输出:

▁▃▅█

但它不会再显示在 tmux 状态栏中。

这是怎么回事?

它的文件夹位于$PATH,配置已重新加载,它在终端中工作,该文件已设置为可执行文件,我不明白,为什么它现在不起作用?

既然有人问:

我通过在终端 ( tmux new) 中输入来启动 tmux。

我的操作系统是 OSX。

我正在运行 xterm2。

我的登录 shell 是带有 Oh-My-Zsh 框架的 ZSH。

我的点文件位于这里

在 tmux 命令行(前缀)中执行以下操作

set-environment PATH $PATH

设置PATH变量并在执行时显示show-environment

复制+粘贴wifi_status/usr/local/bin文件夹也没有解决问题(即使重新启动 tmux)。

编写脚本的完整路径也没有帮助。

我解决了这个问题,由于某种原因,我的自定义函数文件来源不正确,因此无法执行。将函数移动到文件中解决了这个问题,现在它可以工作了。

答案1

看着你的配置,您在 中设置了几个环境变量.zshrc,包括PATH.不要这样做。当您启动交互式 shell 时会读取该文件.zshrc,因此它设置的变量仅在从交互式 shell 启动的程序中可用。它们在以其他方式启动的程序中不可用,特别是从 GUI 菜单启动的程序中。

你没有说你是如何启动 tmux 的。如果您在不通过交互式 shell 的情况下启动它(例如从登录时文件,或直接在 GUI 终端内而不是在tmux交互式提示符下键入),则不会在 tmux 进程中设置这些环境变量。

将环境变量定义移至登录时执行的文件中。执行哪个文件取决于您的登录 shell,对于 GUI 登录,它取决于您的系统如何设置会话启动,这取决于发行版和显示管理器。大多数设置在登录时运行 shell 代码~/.profile,因此请将环境变量定义放在那里。

如果您的登录 shell 是 bash,请确保您没有~/.bash_profile或它仅包含以下两行:

. ~/.profile
if [[ $- = *i* ]]; then . ~/.bashrc; fi

如果您的登录 shell 是 zsh,请确保您~/.zprofile包含以下行:

emulate sh -c '. ~/.profile'

或者,在大多数系统上,您可以在~/.pam_environment.请注意,该文件的语法很简单VARIABLE=VALUE,没有引号、$扩展等。

有关更多详细信息,请参阅设置环境变量的最佳发行版/与 shell 无关的方法是什么?

相关内容