Tuve este comportamiento extraño esta mañana en una terminal de bash:
user@home:/home/user$ [ -f /etc/openvpn/client.conf ] && echo true
bash: [: missing «]»
user@home:/home/user$ [ -f /etc/openvpn/client.conf ] && echo true
true
- El primer comando fue pegado de un script editado con gedit.
- El segundo fue escrito directamente en la terminal.
Después de investigar un poco, descubrí que al eliminar el carácter 30 (el espacio entre client.conf y "]") y reemplazarlo con un espacio, el comando funciona nuevamente.
Mi suposición era correcta: un carácter en blanco desconocido se deslizó en el comando , pero la pregunta es:
- ¿Cómo puedo revelar esos caracteres en la terminal para poder depurar el comando? Y más importante:
- ¿Cómo puedo evitar que esto vuelva a suceder?
Por cierto, ejecuto Ubuntu 18.04 / idioma francés, el script desde el que pego el comando está en una unidad USB y puede que también haya sido editado en Windows.
Gracias por tus muy buenas respuestas. El carácter incorrecto es un carácter UTF-8 de espacio c2 a0 que no se rompe. La pregunta Cómo eliminar el carácter especial 'M-BM-' con sed tiene un hecho interesante sobre ese personaje.
Lo extraño es que el guión está libre de este personaje. Entonces no sé de dónde vino.
history 2|xxd
(porque el history
comando en sí siempre es el último en la lista), o escriba history|grep "CommandWithProblem"|xxd
. Puede usar cualquier otro programa de visualización hexadecimal en lugar de xxd
, pero esto por defecto es un formato que me gusta.
set -x
. Esto le mostrará el comando y cómo se divide. No necesariamente diría "mal personaje aquí", pero te mostraría que bash no se estaba dividiendo en ese personaje.