Как предотвратить вложенный сеанс tmux в новой оболочке входа?

Команда:

mvn install:install-file 

Обычно устанавливает артефакт в вашем локальном репозитории, поэтому вам не нужно его загружать. Однако, если вы хотите поделиться своим артефактом с другими, вам нужно будет развернуть артефакт в центральный репозиторий, чтобы узнать подробнее о плагине deploy .

Дополнительно добавьте на ваш POM автоматически выберет любые сторонние артефакты, которые вам нужны при создании вашего проекта. То есть Это загрузит артефакт из центрального репозитория.

0
задан Irfan Latif 18 January 2019 в 13:31
поделиться

1 ответ

Это решение работает, выясняя, подключен ли текущий терминал к серверу tmux, работающему на той же машине. Чтобы выяснить связь, мы будем использовать псевдотерминальную пару и хакерскую статистику .
Однако может произойти сбой, если файлы /proc fs или /dev недоступны для чтения / записи пользователем. Например, если tmux-сервер был запущен пользователем root, пользователь без полномочий root не сможет его найти.
Кроме того, мы можем получить ложные срабатывания, если сервер tmux получает данные из какого-то другого источника, в то время как мы пытаемся записать в него нули.

Поместите это в конец .bashrc или другого файла запуска оболочки, который вы хотите:

# ~/.bashrc

# don't waste time if $TMUX environemnt variable is set
[ -z $TMUX ] || return

# don't start a tmux session if current shell is not connected to a terminal
pts=$(tty) || return

# find out processes connected to master pseudoterminal
for ptm in $(fuser /dev/ptmx 2>/dev/null)
do
    # ignore process if it's not a tmux server
    grep -q tmux /proc/$ptm/comm || continue
    # number of bytes already read by tmux server
    rchar_old=$(awk '/rchar/ {print $2}' /proc/$ptm/io)
    # write out 1000 bytes to current slave pseudoterminal terminal
    dd bs=1 count=1000 if=/dev/zero of=$pts &>/dev/null
    # read number of bytes again and find difference
    diff=$(( $(awk '/rchar/ {print $2}' /proc/$ptm/io) - rchar_old ))
    # if it equals 1000, current terminal is connected to tmux server
    # however diff comes greater than 1000 most of the times
    [ $diff -ge 1000 ] && return
done

# start or attach to a tmux session
echo 'Press any key to interrupt tmux session.'
read -st1 key && return

# connect to a detached session if exists for current user
session=($(tmux list-sessions 2>/dev/null | sed -n '/(attached)/!s/:.*r//p'))
[ -z $session ] || exec tmux a -t ${session[0]}

# start a new session after all
exec tmux
0
ответ дан Irfan Latif 18 January 2019 в 13:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: