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
, sifailglob
no se configuraron las opciones, que es el valor predeterminado, el patrón fallido se dejará como está:Mientras
zsh
que no informará ningún error de coincidencia de patrón con lanomatch
opción establecida, que es el valor predeterminado:Puedes hacer
zsh
suprimir el error e imprimir el patrón:Puedes hacer que te
bash
comportes comozsh
connomatch
conjunto 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.zsh
también proporcione elnoglob
incorporado, que deshabilita la generación de nombre de archivo en cualquier palabra para el siguiente comando simple:fuente
noglob
el comando. Por ejemplonoglob echo *
, simplemente saldrá*
.