我有以下内容地位权:
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 无关的方法是什么?