Mi problema es que necesito establecer algunas variables y generar algunas líneas cada vez que inicio sesión en el shell ssh, y al mismo tiempo tengo que poder usar sftp para transferir archivos a través de Filezilla.
Ahora, según las preguntas frecuentes de openssh en http://www.openssh.org/faq.html , si sus scripts de inicio hacen eco de algún tipo de salida, se estropea con sftp. Por lo tanto, se retrasa indefinidamente o se produce un error con una "Conexión cerrada por el servidor con el código de salida 128".
He intentado soluciones como mover .bashrc a .bash_profile, o usar el siguiente código en .bashrc:
if [ "$TERM" != "dumb" ]
then
source .bashc_real
fi
Y:
if [ "$TERM" = "xterm" ]
then
source .bashc_real
fi
Sin embargo, nada funciona. Mi terminal de shell es bash, y me conecto a sftp con filezilla.

.bashrcsería fuente descpossh host command.Bashinvocado porscpossh host commandes de hecho no interactivo . Acabo de encontrar esto en el manual de bash: "Bash intenta determinar cuándo se está ejecutando con su entrada estándar conectada a una conexión de red , como cuando lo ejecuta el demonio de shell remoto, generalmente rshd, o el demonio de shell seguro sshd . Si bash determina se ejecuta de esta manera, lee y ejecuta comandos desde~/.bashrc, si ese archivo existe y es legible ". Aquí está la historia interesante .Si estás usando csh:
Y si es bash:
o alternativamente usando bash expresiones regulares:
Estas líneas deben preceder a las líneas en las que sale / repite algo.
fuente
$?varencshdevuelve 1 sivarestá definido y 0 en caso contrario.$-inbashtendría elivalor de char en su valor si el shell es interactivo.La solución de Mike también funcionó para mí. Pero dado que mi shell predeterminado es TCSH, tuve que editar ligeramente la corrección de la siguiente manera (en .tcshrc):
Solo pensé en compartir para beneficio de todos.
fuente
Me gustan algunas de las otras soluciones mencionadas aquí mejor, pero pensé que descartaría la solución que actualmente uso en mis máquinas virtuales bash y csh para evitar desconexiones SFTP debido a comandos de eco en mis scripts de inicio, en caso de que alguien encuentre útil la información .
En BASH:
En csh:
Es un poco fuerza bruta, pero funciona.
fuente
Aquí están las primeras líneas de mi
.bashrcarchivo (predeterminado) :La comprobación de una sesión interactiva evita la confusión con SCP, SFTP o
ssh remote-host commandmodo.Sin esto, si su archivo
.bashrcusaechou otras cosas que se imprimen en stdout, puede obtener este tipo de errores:Received message too long 168435779protocol error: unexpected <newline>fuente