Cambiar el nombre de la pestaña del terminal para alojar el alias en ssh config

1

Soy nuevo en el uso de Mac (Mac Pro, OS X 10.8.4) y me conecto a muchos hosts remotos utilizando ssh. He creado alias en el archivo .ssh / config y me gustaría tener el alias de host como el nombre de la pestaña en la terminal.

¿Puede alguien asesorar sobre cómo se puede hacer?

Muchas gracias.

    
pregunta Arnkrishn 04.09.2013 - 06:23

2 respuestas

3

EDIT : en Yosemite (OS X 10.10) usa esto en su lugar:

function ssh () 
{ 
     servername=$(echo $@ | sed -E 's|([- a-zA-Z0-9:/]+)( *[^@ ]*@)([^@ ]*)||')
     echo -ne "3]0;${servername}
unset -f ssh
7"; /usr/bin/ssh $@ }

Tenga en cuenta que la función espera que el nombre de usuario y el nombre del servidor se especifiquen como user@server (también puede usar la dirección IP del servidor: [email protected] , el nombre de la pestaña se configurará como a.b.c.d ). Otras combinaciones como -l user server no funcionarán correctamente.

Puedes desactivar la función con:

function ssh () 
{ 
    servername=$(echo $@ | sed 's|\([- a-zA-Z0-9:/]\+\) *\([^-]\+@\)*\([-a-zA-Z0-9.]\+\)||' | awk '{print $1}');
    echo -ne "3]0;${servername}
ssh user@server command
7"; /usr/bin/ssh $@ }

Puedes crear una función llamada ssh que establece el nombre de la pestaña del terminal y luego invoca /usr/sbin/ssh :

ssh jaume@myserver ls -l /
  • servername=$(echo $@ ...

    La primera línea extrae el nombre del servidor de los argumentos pasados a ssh . Lo probé con varias posibles invocaciones de ssh con y sin argumentos, pero no puedo prometer que sea a prueba de balas.

  • echo -ne "3]0;${servername}3]0;<name>/usr/bin/ssh $@77";

    La segunda línea es donde ocurre la magia. /usr/bin/ssh es una secuencia de ESCAPE que establece el nombre de la pestaña del terminal. Consulte este artículo de Wikipedia para obtener más información: este código de escape en particular se encuentra en sección de códigos no CSI .

  • ~/.bashrc

    Comience bash con los argumentos proporcionados.

Agregue la función a su archivo %code% (si no usa %code% modifíquelo para que coincida con la sintaxis de su shell y agréguelo al archivo de inicio de su shell) para que siempre esté accesible.

Tenga en cuenta que también establecerá el nombre de la pestaña del terminal cuando ejecute un comando remoto:

function ssh () 
{ 
     servername=$(echo $@ | sed -E 's|([- a-zA-Z0-9:/]+)( *[^@ ]*@)([^@ ]*)||')
     echo -ne "3]0;${servername}
unset -f ssh
7"; /usr/bin/ssh $@ }

por ejemplo:

function ssh () 
{ 
    servername=$(echo $@ | sed 's|\([- a-zA-Z0-9:/]\+\) *\([^-]\+@\)*\([-a-zA-Z0-9.]\+\)||' | awk '{print $1}');
    echo -ne "3]0;${servername}
ssh user@server command
7"; /usr/bin/ssh $@ }
    
respondido por el jaume 06.09.2013 - 10:00
1

Puede usar el argumento LocalCommand en su archivo ~ / .ssh / config para ejecutar un archivo bash o Applescript que establece el nombre de la pestaña.

Bash Script: ~ / .ssh / settabname.sh

#!/bin/bash

osascript -e 'delay 2' -e "tell application \"Terminal\" to tell window 1 to set custom title to \"$1\""

Su archivo ~ / .ssh / config:

Host *
PermitLocalCommand yes

Host yourhostname
LocalCommand ~/.ssh/settabname.sh yourhostname &
...
    
respondido por el Chris_O 06.09.2013 - 10:16

Lea otras preguntas en las etiquetas