From 5c6a78ae72863085948c973a2ae6df0d5ed02bc6 Mon Sep 17 00:00:00 2001 From: thek4n Date: Wed, 16 Oct 2024 21:36:37 +0300 Subject: [PATCH] tmux session ssh with fzf --- home/user/.config/bash/export | 3 ++- home/user/.tmux/ssh | 23 ++++++++++++++++------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/home/user/.config/bash/export b/home/user/.config/bash/export index 8f0e061..229fb43 100644 --- a/home/user/.config/bash/export +++ b/home/user/.config/bash/export @@ -46,6 +46,7 @@ ctrl-a:toggle-all,\ ctrl-p:preview-up,\ ctrl-n:preview-down,\ ctrl-u:clear-query,\ -tab:toggle+down,\ +ctrl-q:toggle+down,\ +tab:replace-query,\ shift-tab:toggle\ " \ No newline at end of file diff --git a/home/user/.tmux/ssh b/home/user/.tmux/ssh index dc4fa3b..03ec500 100755 --- a/home/user/.tmux/ssh +++ b/home/user/.tmux/ssh @@ -2,17 +2,26 @@ set -eu -echo -n "ssh server: " -declare SSH_SERVER -read -r SSH_SERVER -readonly SSH_SERVER +SSH_SERVERS="$(grep 'Host ' "${HOME}/.ssh/config" | sed 's/^Host //')" +HOSTS=$(grep -v '^#' /etc/hosts) +ALL_HOSTS="$(echo "$SSH_SERVERS" "$HOSTS" | grep -v '\*'| sed 's/ /\n/g' | sed '/^$/d' | sort | uniq)" -declare -r SSH_SERVER_SESSION_NAME="${SSH_SERVER//\./_}" -declare -r SESSION="ssh-${SSH_SERVER_SESSION_NAME}" +SSH_SERVER="$(echo -n "$ALL_HOSTS" | fzf +m --print-query --bind 'tab:replace-query' | tail -n 1)" + + +if [[ -z "${SSH_SERVER}" ]]; then + exit 0 +fi + + +SSH_SERVER_SESSION_NAME="${SSH_SERVER//\./-}" +SSH_SERVER_SESSION_NAME="${SSH_SERVER_SESSION_NAME//:/-}" +SSH_SERVER_SESSION_NAME="${SSH_SERVER_SESSION_NAME%% *}" +declare -r SESSION="ssh_${SSH_SERVER_SESSION_NAME}" if ! tmux has-session -t "${SESSION}" 2>/dev/null; then - tmux new-session -s "${SESSION}" -d -n "1" "ssh ${SSH_SERVER}" + tmux new-session -s "${SESSION}" -d -n "1" "ssh ${SSH_SERVER} || read" fi tmux switch-client -t "${SESSION}" \ No newline at end of file