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.