2 votos

¿Cambia MacOS el funcionamiento de la redirección?

La línea 32 de mi script es

rm ~/UniGen/* 2> /dev/null

La redirección se debe a que espero que el directorio esté vacío a veces y no necesito que el desorden me lo diga.  Pero sigo recibiendo

/Users/WGroleau/bin/Genealogy:32: no matches found: /Users/WGroleau/UniGen/*

cuando lo ejecute. ¿Por qué?

4voto

David Anderson Puntos 2189

El mensaje de error se obtiene del shell. Lo mismo ocurriría si se introduce el siguiente comando.

echo ~/UniGen/* 2> /dev/null

El shell zsh se expande * sólo para no encontrar ningún archivo que coincida, entonces genera un mensaje de error indicando esto. Tanto su comando externo rm y mi comando incorporado echo nunca se ejecuta. La redirección sólo se produce cuando cualquiera de los dos comandos escribe en stderr . En este caso, el shell zsh escribe en stderr .

Pruebe lo siguiente en su lugar. Aquí, el shell zsh está incluido en la redirección.

{ rm ~/UniGen/*; } 2> /dev/null

Para que sepas: Bash funciona de forma diferente en rm ~/UniGen/* 2> /dev/null . Cuando un shell bash se expande * para no encontrar ninguna coincidencia, la cadena "/Users/WGroleau/UniGen/*" se pasa al comando rm comando. En este caso, rm emitiría el siguiente mensaje a stderr que sería redirigido a /dev/null . En otras palabras, el siguiente mensaje no aparecería.

rm: /Users/WGroleau/UniGen/*: No such file or directory

De todos modos, incluyendo los corchetes {} suprimiría el mensaje de error tanto para zsh como para bash.

Basado en un comentario dejado por el usuario1934428 en relación con el nomatch se puede emular un comportamiento similar al de bash utilizando la subshell que aparece a continuación.

(unsetopt nomatch;rm ~/UniGen/* 2> /dev/null)  

Aquí, "/Users/WGroleau/UniGen/*" se pasa al comando rm comando.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X