Сценарий Bash для запуска tmux и выполнения команд

Я бы предложил указать PID соответствующего процесса с помощью $! синтаксисом.

Этап 1: запустить процесс, но на этот раз с переменной, которая содержит произвольное значение PID:

sudo ssh blah@blah 80:localhost:80 & arbpid=$!

Этап 2: Если переменная arbpid сохраняется только при создании туннеля, вы можете использовать ее для целевого убийства процесса в конце вашего скрипта:

kill $arbpid

Другими словами, то, что мы сделали здесь, это пометили ssh-туннель произвольной меткой (которая является переменной и ее значением) и использовали ее для целевого убийства.


Обратите внимание, что между командой и переменной стоит один амперсанд. Как и в случае с одиночными амперсандами после команд Unix, это сделано для того, чтобы команда перед амперсандом выполнялась в другом подпроцессе (фоновом), в то время как вторая команда (создание переменной в данном случае) будет выполняться в текущем процессе (на переднем плане).

2
13.01.2017, 21:09
1 ответ

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

Это, а также тот факт, что вы можете назвать и искать сеанс, дает следующий Nautilus-Script:

#!/bin/bash
# nautilus script to start files in nvim under a tmux session
# place this script into ~/.local/share/nautilus/scripts/nvimOpen.sh
# presented without warranty by mike aka curvi

# nvim running in another session? -
# TODO tmux rename-session -t $whaever nvim

# Tmux session 'nvim' is running neovim always!
if tmux has-session -t nvim ; then
  # test if it is open and split it
  for selected_file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ; do
    tmux send-keys -t nvim Escape # change to normal mode
    tmux send-keys -t nvim ";vsp $selected_file" Enter # open file in vsplit
  done
else
  # or start it up freshly!
  tmux new-session -d -s nvim ;
  tmux send-keys -t nvim "nvim -O $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" Enter
  tmux send-keys -t nvim Escape # change to normal mode
fi
# after the tmux session is prepared - attach to it in gnome-terminal!
gnome-terminal -e "tmux attach-session -d -t nvim"

Бонус: поскольку я отправляю ключи, вместо того, чтобы вводить команды напрямую, они появляются в истории терминала, как и ожидалось!

Внимание: мой nvim / init.vim содержит переназначение ; на : , что означает, что для запуска нужно проверить отправленные ключи на «обычные» настройки vim / neovim!

0
27.01.2020, 22:43

Теги

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