GNU/Linux >> Tutoriales Linux >  >> Linux

Usa .bashrc sin romper sftp

Solución 1:

Intenta hacer esto en su lugar

if [ "$SSH_TTY" ]
then
   source .bashc_real
fi

Solución 2:

La respuesta de Mike probablemente funcionará. Pero vale la pena señalar que puede lograr esto seleccionando cuidadosamente en qué archivos de inicio colocar las cosas detalladas. Desde la página de manual de bash:

Cuando se invoca bash como un shell de inicio de sesión interactivo, o como un shell no interactivo con la opción --login, primero lee y ejecuta comandos desde el archivo /etc/profile, si ese archivo existe. Después de leer ese archivo, busca ~/.bash_profile, ~/.bash_login y ~/.profile, en ese orden, y lee y ejecuta comandos desde el primero que existe y es legible. La opción --noprofile se puede usar cuando se inicia el shell para inhibir este comportamiento.

Cuando se inicia un shell interactivo que no es un shell de inicio de sesión, bash lee y ejecuta comandos desde ~/.bashrc, si ese archivo existe. Esto se puede inhibir usando la opción --norc. La opción de archivo --rcfile forzará a bash a leer y ejecutar comandos desde el archivo en lugar de ~/.bashrc.

Las herramientas sftp/scp inician un shell interactivo sin inicio de sesión, por lo que se obtendrá .bashrc. Muchas distribuciones obtienen .bashrc de .bash_profile o viceversa, por lo que puede resultar confuso. Un buen truco para probar la limpieza de su entorno de inicio de sesión es hacer ssh con un comando, que simula la misma forma en que se conecta scp/sftp. Por ejemplo:ssh myhost /bin/true le mostrará exactamente lo que ve scp/sftp cuando se conectan.

Una demostración sencilla:

[email protected]:~$ echo "echo Hello from .profile" > .profile
[email protected]:~$ echo "echo Hello from .bashrc" > .bashrc

sazerac:~ insyte$ ssh mazer /bin/true
Hello from .bashrc
sazerac:~ insyte$

[email protected]:~$ rm .bashrc

sazerac:~ insyte$ ssh mazer /bin/true
sazerac:~ insyte$

La primera prueba hará que se rompa scp/sftp/rsync, etc. La segunda versión funcionará bien.

Solución 3:

Si está utilizando csh:

if ($?prompt)
  ... interactive stuff ...

Y si es bash:

if [[ $- == *i* ]]; then
  ... interactive stuff ...
fi

o alternativamente usando expresiones regulares de bash:

if [[ $- =~ i ]]; then
  ... interactive stuff ...
fi

Estas líneas deben preceder a las líneas en las que emites o repites algo.


Linux
  1. ¿Usar la extensión .sh o .bash para scripts Bash?

  2. ¿Usar variables dentro de la expansión {} sin `eval`?

  3. ¿Regenerar .bashrc desde Shell actual?

  4. Usar SFTP y SCP

  5. Historial de bash sin números de línea

Cómo usar el comando de lectura Bash

.bashrc frente a .bash_profile

¿Qué shell debo usar:Tcsh Vs Bash?

Cómo usar el comando echo sin nueva línea

¿Qué es Zsh? ¿Deberías usarlo?

¿Cómo usar kill SIGUSR2 en bash?