如何将当前工作目录传递给来自 .tmux.conf 的命令 运行?

How do I pass the current working directory to a command run from .tmux.conf?

如果当前工作目录在 git 存储库中,我希望我的 tmux 状态行显示有关当前 git 存储库的一些信息。我写了一个脚本,在给定当前工作目录时打印此信息。但是,我终生无法弄清楚如何将当前目录传递给脚本!我尝试将以下所有内容添加到我的 .tmux.conf:

1.

set-window-option -g status-right "#(/Users/devon/scripts/git_check.py $PWD)"

2.

set-window-option -g status-right "#(/Users/devon/scripts/git_check.py #{pane_current_path)"

3。 (修改我的脚本以从 $TMUX_PATH 环境变量获取输入后)

setenv -g TMUX_PATH = "$PWD"
set-window-option -g status-right "#(/Users/devon/scripts/git_check.py)"

我什至尝试在.profile中将$PROMPT_COMMAND设置为'export TMUX_PATH=$PWD',但一切都是徒劳。正确的做法是什么?

我想出了一个(有点古怪的)方法来做到这一点。我将其插入到我的 .profile 中:

[[ -n $TMUX ]] && PROMPT_COMMAND='tmux setenv -g TMUX_PATH "$PWD";tmux refresh-client -S;'

每当出现新的 bash 提示时,这会将 tmux 的 TMUX_PATH 环境变量设置为当前路径。然后我可以从脚本中读取环境变量。 (此命令还会刷新状态行——删除 tmux refresh-client -s; 部分以禁用它。)

我很确定问题是 tmux 是 运行 我从 shell 中加载的脚本,这意味着我的 tmux 会话中的环境变量不可读从我的剧本。所以我需要将本地环境变量导出到 tmux 外部的 shell,然后我可以在我的脚本中使用它来获取 tmux 中的当前路径。

#(cd ..; pwd) #(pwd) 中,cd 仅更改第一个命令的密码。

# vim ~/.tmux.conf

# Get current working directory for outside program: use $TMUX_WORKING_DIR to get the active dir path of tmux
set-hook -g pane-focus-in 'if [ -z ${TMUX+x} ]; then eval "export $(tmux show-environment TMUX_WORKING_DIR)"; else tmux setenv TMUX_WORKING_DIR $(pwd); fi'
# vim ~/.bashrc

if [ -z ${TMUX+x} ]; then eval "export $(tmux show-environment TMUX_WORKING_DIR)" && cd $TMUX_WORKING_DIR; else tmux setenv TMUX_WORKING_DIR $(pwd); fi
clear

https://yingshaoxo.blogspot.com/2021/05/how-to-enhance-ability-of-tmux.html