查明当前别名/函数/脚本是否在 Tmux 内运行 - 稍作改动

查明当前别名/函数/脚本是否在 Tmux 内运行 - 稍作改动

注意:是的,我读过如何通过 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运行单个命令所需的跨度的阻塞,那么您可以执行上述操作。

您可以使用此技术来携带您可能喜欢的其他任何东西。

相关内容