Copiar y pegar aquí documento en Bash convierte pestañas en puntos

Copiar y pegar aquí documento en Bash convierte pestañas en puntos

Utilizo Windows 10 home (compilación 16299.248) y estoy realizando SSH en una máquina Ubuntu 16.04 remota con varios clientes SSH (como Putty/MobaXterm).

Copio y pego el siguiente código de mi cuenta personal de GitHub en una sesión SSH:

cat <<-EOF >> "$HOME"/.bashrc
    export s_a="/etc/nginx/sites-available"
    export s_e="/etc/nginx/sites-enabled"
    export drt="/var/www/html"
    source "$HOME"/"$repo"/software_internal.sh
EOF

lo copiodirectamente desde mi cuenta de GitHub aquí (versión sin formato)aunque el siguiente problema ocurre incluso si copio desde la versión sin formato de GitHub.

Mi problema

El resultado en el Bash remoto es este:

> .export s_a="/etc/nginx/sites-available"
> .export s_e="/etc/nginx/sites-enabled"
> .export drt="/var/www/html"
> .source "$HOME"/"$repo"/software_internal.sh
> EOF

Tenga en cuenta el único punto al comienzo de casi cada línea.

Algo está traduciendo las tabulaciones en puntos individuales.

Hechos

  • El problema que acabo de describir ocurre con varios tipos de clientes SSH.

  • La gente también pudo replicar el problema en sistemas Linux (Debian, Ubuntu), además, si uso el Subsistema Windows 10 para Linux (WSL) no tengo los puntos (ya sea de Powershell o CMD). Tampoco uso administradores de portapapeles/portapapeles de ningún tipo en Windows 10.

  • Tampoco hay evidencia de que GitHub esté usando algún carácter de tabulación no convencional.

  • Sucede cuando copio desde Mozilla Firefox o Google Chrome.

  • No cambié nada en DigitalOcean Ubuntu Bash después de instalarlo (después de crear mi "gota" en la terminología de DigitalOcean).

Esto parece ser un error en GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu). También pude replicar el error en Debian estable 9.3 con Bash 5.2. Sin embargo, este problema no ocurre en Arch, por lo que es probable que sea exclusivo de las distribuciones Debian.

Más información

El problema ocurre no solo en DigitalOcean sino también en Linode: un ingeniero de Linode pudo reproducir esto en Ubuntu 14.04, 16.04 y 17.04.

Es posible que DigitalOcean y Linode personalicen Ubuntu de la misma manera y el error no esté en Bash sino que sea exclusivo de DigitalOcean y Linode.

Resumen

Es muy poco probable que el problema anterior provenga de Windows 10, clientes SSH, GUI de GitHub o navegadores web; Es probable que provenga de los repositorios de Debian, Bash en 4.3/5.2/otro o la combinación de Debian-Bash.

Mi pregunta

¿Cuál es la forma correcta de afrontar este problema? Por supuesto, podría eliminar las pestañas del documento aquí, pero definitivamente es algo que no quiero. Las pestañas me ayudan a organizar mejor el documento aquí.

Respuesta1

Bash está completando el nombre del archivo dentro del heredoc. Su directorio no tieneno ocultoarchivos (archivos que no comienzan con '.'), por lo que el más largosubcadenaEl número de caracteres que coinciden con el comienzo de todos los nombres de archivos en el directorio es '.', y eso es lo que se proporciona y se deja en su entrada.

La misma versión de Bash muestra este comportamiento en todos los lugares donde la he probado, por lo que claramente no se limita a un proveedor de VPS específico. No he podido detener esto sin deshabilitar completamente la finalización (por lo que no puedo proporcionar un "Esto es lo que Linode debe hacer para arreglar la imagen de distribución"), pero existen bastantes soluciones para su uso específico:

  1. La solución más sencilla, sin cambiar nada en Bash, es crear unno ocultoarchivo en el directorio ( $HOME), antes de que comience el heredoc. Eso hará que la finalización del nombre del archivo coincida con 0 caracteres. Podrías hacer esto con say touch "$HOME"/myFile.

  2. Inicie un shell con readline deshabilitado y haga lo suyo allí.bash --noediting

  3. Desactiva la finalización antes del heredoc:bind 'set disable-completion on'

información relacionada