通过SSH创建一个新的屏幕窗口?

时间:2013-04-09 10:09:38

标签: ssh gnu gnu-screen

我在网上发现了一个添加到我的.bashrc的函数,该函数使用主机名生成一个新的SSH会话:

# Opens SSH on a new screen window with the appropriate name.
screen_ssh() {
    numargs=$#
    screen -t ${!numargs} ssh $@
if [ $TERM == "screen" -o $TERM == "screen.linux" ] && [ ! -z "$PS1" ];  then
    alias ssh=screen_ssh
fi

if [[ $- == *i* ]]
then
  [ "$STY" ] && ssh() { screen -t "${1##*@}" ssh "$@"; } # Spawn new window in Screen  for SSH
fi

但它也会对别名执行此操作,如下所示:

lsrem(){ ssh $1 "ls -l" ; }

所以我的问题是如何阻止它使用别名/函数,并且只能以交互方式工作:

ssh somehost

提前致谢。

1 个答案:

答案 0 :(得分:0)

我找到了一种(hacky)方式:

# Opens SSH on a new screen window with the appropriate name.
screen_ssh() {
    numargs=$#
        if [ "$numargs" -eq "1" ];
        then   
                screen -t ${!numargs} ssh $@
        else   
                ssh $@
        fi
}
if [ $TERM == "screen" -o $TERM == "screen.linux" ]; then
    alias ssh=screen_ssh
fi

这会检查SSH的数量是否大于1,所以当我这样做时,不会产生新的屏幕会话:

ssh hostname

我绝对愿意接受更好的方法!