Это должно быть возможно, говоря удару выписать и перечитать историю после каждой команды. Непротестированный:
PROMPT_COMMAND="$PROMPT_COMMAND"$'\nhistory -a; history -n'
Совместное использование истории является поведением по умолчанию ksh. В zsh Вы получаете это поведение путем включения share_history
опция, и можно получить намного более прекрасный контроль над тем, как история сохраняется и объединяется путем тонкой настройки других опций истории.
tmux kill-session [-t session_name]
процессы в виртуальных терминалах должны получить SIGHUP.
Может быть, это не самое элегантное решение, но делает то, что вы просили:
tmux list-panes -s -F "#{pane_pid} #{pane_current_command}" | grep -v tmux | awk '{print $1}' | xargs kill -9
Если вы запустите его из вашей tmux-сессии, он убьет все процессы, которые он породил, и вы сможете выйти из tmux с помощью exit
.
Это тоже беспокоило меня, поэтому я написал плагин TMUX для этого. Это не идеально, но легко можно продлить, чтобы знать, как безопасно убивать самые виды процессов, прежде чем выходить из TMUX: TMUX-Safekill
( отказ от ответственности :я новичок )Этот скрипт закрывает все панели/окна в some_session
и завершает работу:
#!/usr/bin/env bash
session="some_name"
echo about to kill ${session}, ok?
read -n 1 -s -r -p "Press key..."
echo
sessiontest=`tmux ls | grep ${session}`
if [ "${sessiontest}" == "" ];
then
echo no running session ${session}
else
for name in `tmux list-windows -F '#{window_name}' -t ${session}` ; do
tmux select-window -n
for pane in `tmux list-panes -F '#{pane_id}' -t ${session}` ; do
tmux send-keys -t $pane C-c
# send SIGINT to all panes in selected window
echo ${session}:$name.${pane//%}
done
for pane in `tmux list-panes -F '#{pane_pid}' -t ${session}` ; do
kill -TERM ${pane}
# terminate pane
done
done
fi
echo list-sessions:
tmux list-sessions