答案1
你实际上不是改变整个环境的用户。您只是打开了一个以“root”身份运行的新 shell,但它的父 shell 仍然在您的帐户下,主“tmux”进程也是如此。Tmux 几乎不知道该 shell 内部发生了什么。
运行该whoami
命令时,进程树如下所示:
tmux server [nlykkei]
└─ bash [nlykkei]
└─ sudo -u root bash [setuid root]
└─ bash [root]
└─ whoami [root]
当 tmux 需要扩展时#(whoami)
,它会采用最简单的方法并直接运行命令。(它实际上无法通过您启动的三重嵌套 shell 运行该命令。)因此输出始终反映拥有“tmux”服务器进程的帐户。
tmux server [nlykkei]
├─ bash [nlykkei]
│ └─ sudo -u root bash [setuid root]
│ └─ bash [root]
└─ whoami [nlykkei]
不幸的是,我想不出一个好的方法将信息从嵌套 shell 实际导出到 tmux。已经有#{pane_title}
和#{window_name}
,它们都可以使用转义码进行设置,但它们当然已经有不同的用途。
一种方法是可能工作是:
tmux set -g status-right '#(ps -o user= -q $(pgrep -t #{s/^.dev.//:pane_tty} -x -n bash))'
tmux set -g status-right '#(ps -t #{pane_tty} -o user= --sort start | tail -1)'