【懒人包】konsole快速连接

konsole终端快速打开新的连接

1 建立文件

1.1 ~/bin/goto

#!/bin/bash

host=$1
[ "$host" = "" ] && echo "goto <remote host>" && exit
for key in $*; do
    line=($(cat ~/bin/goto.hosts | grep "^$key "));
    [ "$line" = "" ] && continue
    key=${line[0]}
    host=${line[1]}
    port=${line[2]}
    unset line[0]
    unset line[1]

    unset line[2]
    cmd=${line[@]}
    konsole="org.kde.konsole"
    session=$(qdbus $konsole /Windows/1 newSession)
    qdbus $konsole /Sessions/$session setTitle 1 "$key"
    qdbus $konsole /Sessions/$session sendText "ssh -t $host -p $port '$cmd'"
    qdbus $konsole /Sessions/$session sendText $'\n'
done

1.2 ~/bin/goto.hosts

1.2.1 文件格式

每一行对应一个连接,各个参数以空格分割。

  • 第一列:自己起的名字
  • 第二列:主机名(如果需要应包含用户名user@host.com)
  • 第三列:端口
  • 其余列;连接成功后立即执行的命名
  • 例如:
    h1   h1.domain.com      22  tmux a || tmux
    h2   user@h1.domain.com 22  tmux a || tmux

1.3 自动补全函数(~/.bashcompletion)

#!/bin/bash
function _goto() {
    local cur prev opts
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    opts="$(cat ~/bin/goto.hosts | cut -d ' ' -f 1)"
    if [ "$cur" = "" ]; then
	COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
    else
	COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
	if [ ! "${#COMPREPLY[@]}" = "1" ]; then     # ${#COMPREPLY[@]} 中的丼号需要替换为英文的丼号
	    COMPREPLY=( $(echo ${opts} | sed 's/ /\n/g' | grep ${cur}))
	fi
    fi
    return 0
}

2 加载自动补全

在.profile加入

...
source ~/.bash_completion
complete -F _goto goto
...