2 votos

forzar que el comando sips escriba la salida en stdout

He escrito un script que convierte un archivo icns a png y luego codifica el png con base64.

Podría hacerlo en 2 pasos:

  • sips -s format png test.icns -o test.png
  • base64 -w0 test.png

Pero como test.png es sólo un archivo intermedio, me gustaría canalizar la salida del primer comando directamente a base64 ¿Cómo lo hago?

Tenga en cuenta que sips no parece admitir /dev/stdout como argumento de -o .

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.

3voto

Jose Chavez Puntos 645

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.

0 votos

He instalado coreutils con brew y vinculado gbase64 a un dir en el $PATH antes de /usr/bin y eliminó la parte delantera g . :)

0 votos

¿El oneliner produce un archivo con el nombre __$$ ¿y luego lo quitas?

1 votos

No, el archivo se denomina con un número que cambia con el ID del proceso, es decir, evita un conflicto si tiene varias pestañas y ejecuta la línea varias veces.

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