注意:是的,我读过如何通过 bash 脚本判断我是否处于 tmux 会话中?
sudo su -
如果我在两者之间使用,如何确定我是否正在从 shell 或 shell 脚本或 shell 函数或别名运行 Tmux 会话?
答案1
在您的/etc/sudoers
文件中,您可以显式允许环境变量传播到 sudo 环境。
例子
Defaults requiretty
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
因此,一种方法是添加一个由 产生的变量tmux
并让它通过。
答案2
% sudo su -- 2<<STATE
> TMUX='$TMUX'
> exec 2>/dev/tty
> STATE
# . /dev/fd/2
# {
# echo "$TMUX"
# echo "$TMUX" >&2
# }
###OUTPUT
/tmp/tmux-1000/default,23878,1
/tmp/tmux-1000/default,23878,1
sudo
将关闭其调用进程的所有文件描述符,但是0,1,2
您需要/dev/tty
或<&0
无法输入密码,但如果您可以接受>&2
运行单个命令所需的跨度的阻塞,那么您可以执行上述操作。
您可以使用此技术来携带您可能喜欢的其他任何东西。