Замена tmux с должностным лицом

-i аргументом sed является расширение GNU. Вы, вероятно, не выполняете GNU sed, который является, почему Вы получаете ошибку о -i быть нераспознанным.

6
07.03.2013, 17:48
3 ответа

Я не думаю, что tmux может сделать это. Должно быть легко исправить, если Вы знаете программирование C.

Одна вещь, которую Вы могли сделать, назвать tmux из сценария оболочки обертки и позволить сценарию решить, выйти ли или нет. Отправьте сигнал в обертку, чтобы сказать этому выполнять интерактивную оболочку, когда tmux выйдет. Вот непротестированное подтверждение концепции сценария обертки:

export TMUX_PARENT_PID=$$
trap 'exec bash -i' USR1
tmux

В ~/.tmux.conf:

update-environment DISPLAY WINDOWID SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION TMUX_PARENT_PID

Из tmux, для получения приглашения оболочки после отсоединения:

TMUX_PARENT_PID=$(tmux show-environment | sed -n 's/^TMUX_PARENT_PID=//p')
kill -USR1 $TMUX_PARENT_PID
tmux detach-client
2
27.01.2020, 20:30
  • 1
    Хорошая идея поймать сигнал в сценарии обертки. –  AkiRoss 08.03.2013, 14:02

Если tmux будет работать, то переменная среды, TMUX был бы установлен, таким образом путем помещения строк как это в bashrc, tmux, все еще будет оболочкой.

Но если бы это уже работает, удар или другая оболочка обычно работали бы, (не используйте chsh для установки оболочки на tmux, который может быть проблемой),

if [[ ! -z ${TMUX} ]]; then
    // run tmux
    tmux "$@"
    exit 0
fi
// tmux is already running
0
27.01.2020, 20:30

Я знаю, что опоздал на вечеринку на несколько лет, но, прочитав ответ @Gilles, я потратил час или два на переделку моего .profileфайла, чтобы добавить сигнальный механизм, который, как я полагаю, мог бы лучше ответить исходный вопрос (тот, что в теле, а не в заголовке):

# Start tmux:
if [ -n "$(type tmux 2> /dev/null)" ] && [ -z "$TMUX" ]; then
    # Configure a signal handler to allow the tmux session to toggle the exit flag:
    export EXIT_FLAG=1
    export TMUX_PARENT_PID=$$
    trap 'EXIT_FLAG=$(($EXIT_FLAG ^ 1))' USR1

    # Start tmux:
    tmux new-session -s "shell$$" "TMUX_PARENT_PID=$$ $SHELL -l"

    # Exit, assuming the exit flag has not been flipped:
    if [ "x$EXIT_FLAG" == "x1" ]; then
        exit
    fi

    # Otherwise, cleanup the environment:
    unset EXIT_FLAG
    unset TMUX_PARENT_PID
    unset TMUX
fi

При этом в моем .profileвсе оболочки будут запускать tmux по умолчанию, а также завершать работу с tmux. Если я хочу, чтобы оболочка осталась после выхода из tmux, мне просто нужно запустить kill -s USR1 $TMUX_PARENT_IDперед запуском exit, и оболочка не выйдет.

Обратите внимание, что приведенная выше команда kill...на самом деле переключает переменную EXIT_FLAG, поэтому запуск kill...два раза подряд эффективно отменяет сам себя.

0
13.05.2020, 22:34

Теги

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