El sips
no admite la salida a la salida estándar, por lo que no se puede canalizar directamente el archivo resultante en otro programa. Y como ya has comprobado, tampoco admite el uso de /dev/stdout
o una tubería con nombre o similar, ya que recreará el archivo cuando se produzca la salida.
Sin embargo, si lo desea, puede utilizar los "trucos" habituales de las secuencias de comandos del shell para crear una "línea única" que combine los comandos:
sips -s format png test.icns -o __$$ && base64 __$$ && rm __$$
Tenga en cuenta que esto es para Bash, y que creará y eliminará un archivo temporal llamado __.
También hay que tener en cuenta que he eliminado el -w0
en su pregunta del base64
de mando. Este es un parámetro que se utilizaría, por ejemplo, en la versión de Linux del base64
pero el comando de MacOS no tiene ese parámetro. De hecho ese comportamiento de envoltura que solicitas con ese parámetro ya está activado por defecto en MacOS.
2 votos
ffmpeg -i '/private/var/root/Desktop/Volume limiter.app/Contents/Resources/applet.icns' -c:v png -f rawvideo - | base64
1 votos
Usando zsh:
(){ sips -s format png test.icns --out $1; base64 $1 } =()
0 votos
@robertklep lo hace
=()
al final invocar la función que se acaba de definir? ¿Dónde puedo encontrar más información sobre=()
? Gracias.1 votos
@TeddyC
=(command)
devolverá el nombre de un archivo temporal que contiene la salida decommand
. Sin embargo, también funciona sin un comando, y creará (y devolverá el nombre de) un archivo temporal vacío. Ese nombre de archivo se pasa a la función definida por() { … }
como primer argumento ($1
). Está documentado en la página man de zshexpn.1 votos
¡@robertklep este truco de zsh es absolutamente increíble! Me va a ahorrar mucho trabajo. ¡Gracias!