¿Cómo puedo saber (en ~/.bashrc
) si estoy ejecutando en modo interactivo o, digamos, ejecutando un comando a través de ssh? Quiero evitar la impresión de secuencias de escape ANSI .bashrc
si es lo último.
Respuesta1
De acuerdo a man bash
:
PS1 está configurado y $- incluye i si bash es interactivo, lo que permite que un script de shell o un archivo de inicio pruebe este estado.
Entonces puedes usar:
if [[ $- == *i* ]]
then
do_interactive_stuff
fi
También:
Cuando se inicia un shell interactivo que no es un shell de inicio de sesión, bash lee y ejecuta comandos de /etc/bash.bashrc y ~/.bashrc, si estos archivos existen.
Por lo tanto, ~/.bashrc
solo se obtiene para shells interactivos. A veces, las personas lo obtienen de ~/.bash_profile
o ~/.profile
que es incorrecto ya que interfiere con el comportamiento esperado. Si desea simplificar el mantenimiento del código que es común, debe usar un archivo separado para contener el código común y obtenerlo independientemente de ambos archivos rc.
Es mejor si no hay salida estándar de rc
los archivos de inicio de sesión como ~/.bash_profile
o, ~/.profile
ya que puede interferir con el funcionamiento adecuado de, rsync
por ejemplo.
En cualquier caso, sigue siendo una buena idea probar la interactividad, ya que puede existir una configuración incorrecta.
Respuesta2
la test
herramienta puede verificar esto (desde la página de manual):
-t FD True if FD is opened on a terminal.
Entonces puedes usar, por ejemplo:
if [ -t 0 ] ; then
echo stdin is a terminal
.....
fi
o
if [ -t 1 ] ; then
echo stdout is a terminal
fi
Respuesta3
Usar:
if tty -s; then echo interactive; fi
Respuesta4
Así lo hace Red Hat... Supongo que es la forma más rápida...
if [ "${-#*i}" == "$-" ]; then
Significa obtener los parámetros de bash, eliminar una subcadena, lo más corto posible, hacer coincidir todo entre el principio y i. Luego verifique si es el mismo que los parámetros de bash originales.
Verifique que hizo su trabajo conectándose con el usuario mediante sftp; fallará si las sesiones no interactivas tienen resultados