Hoy llegué a casa del trabajo (ejecuté bash en un cuadro de Ubuntu) e intenté ejecutar algún código en mi cuadro de arco local con mi amado zsh y los comandos fallaban.
El comando está debajo con la información personal y la ip cambiada obviamente
ffmpeg -i rtsp://user:pass@my.webserver.org:5554/my-media/media.amp?videocodec=h264  -threads 3 -vcodec copy -f segment -segment_time 2 outfiles/cam_out%04d.mp4
Funciona perfecto en bash, pero cuando lo ejecuto en zsh obtengo el error
zsh: no matches found: rtsp://user:pass@my.webserver.org:5554/my-media/media.amp?videocodec=h264
¿Por qué me ha traicionado mi amado zsh?

mkdir -p 'rtsp://user:[email protected]:5554/my-media/media.amp-videocodec=h264'y luego bash y zsh le fallarán. Al menos zsh te muestra tu error aquí.Respuestas:
En cadena:
que tiene
?en esa cadena, por lo que el shell realizará la expansión del nombre de ruta en esa cadena, utilizando reglas de coincidencia de patrones .En
bash, sifailglobno se configuraron las opciones, que es el valor predeterminado, el patrón fallido se dejará como está:Mientras
zshque no informará ningún error de coincidencia de patrón con lanomatchopción establecida, que es el valor predeterminado:Puedes hacer
zshsuprimir el error e imprimir el patrón:Puedes hacer que te
bashcomportes comozshconnomatchconjunto de opciones, activandofailglob:Más en general, puede deshabilitar la generación de nombres de shell:
(o
set -o noglob,set +o noglob)o usando uno de shell citando métodos de para hacer que los convites de shell
?y otros patrones especiales coincidan con caracteres especiales literalmente.zshtambién proporcione elnoglobincorporado, que deshabilita la generación de nombre de archivo en cualquier palabra para el siguiente comando simple:fuente
noglobel comando. Por ejemplonoglob echo *, simplemente saldrá*.