Estoy tratando de abrir un PDF usando Vista previa donde el archivo de entrada es una var de shell:
$ pdf=$(wget -qO- 'http://website.com/file.pdf') && open "$pdf"
$ pdf=$(wget -qO- 'http://website.com/file.pdf') && open -a /Applications/Preview.app -f "$pdf"
$ open -a /Applications/Preview.app $(wget -qO- 'http://website.com/file.pdf')
$ pdf=$(wget -qO- 'http://website.com/file.pdf') | open -a /Applications/Preview.app -f -
etc etc etc etc
Siempre me sale el mismo error:
-bash: /usr/bin/open: Lista de argumentos demasiado larga
¿Es posible hacer esto?
PDF de ejemplo para quien quiera probar:
https://www.exploit-db.com/docs/english/44592-linux-restricted-shell-bypass-guide.pdf
Genial problema que muestra lo asombrosos que son bash, pipes y open. Estás tan cerca en el cuarto intento:
wget -qO- 'https://www.com/big.pdf' | open -f -a Preview.app
Afortunadamente, el -a
argumento permite -f
tomar los datos de stdin pero no abrirlos en TextEdit.
Puede abrir un PDF como una variable Bash (expresada como una ruta al archivo) de esta manera.
Establece tu variable:
pdf=/path/to/44592-linux-restricted-shell-bypass-guide.pdf
Abre el archivo así:
open "$pdf" -a Preview
Sin embargo, su ejemplo indica que el archivo no existe en su sistema de archivos. Si desea abrir un flujo de datos sin procesar almacenado en una variable, le recomiendo hacer eco de su variable y canalizarla para open
usar la -f
opción como esta.
Defina su variable:
pdf=$(wget -qO- https://www.exploit-db.com/docs/english/44592-linux-restricted-shell-bypass-guide.pdf)
Abra los datos sin procesar como una secuencia desde la entrada estándar:
echo $pdf | open -f -a Preview
Explicación: si almacena la salida de wget -qO- …
como una variable, en lugar de descargar el archivo en su sistema de archivos, open
no sabrá qué hacer, ya que le está pasando los datos del archivo sin procesar en lugar de la ruta al archivo. En man open
'archivo' se refiere a un archivo que se puede abrir para la aplicación dada, la variable en su ejemplo no es esa. La -f
opción es útil en este escenario, ya que su método para establecer la variable implica almacenar todo el flujo de archivos, que no se interpretará como un archivo open
y, por lo tanto, solo se puede abrir como un flujo de archivos.
echo
agrega una nueva línea al final de lo que imprime. Puede resolver los dos últimos problemas usando printf "%s" "$pdf"
en lugar de echo $pdf
, pero el primero es más difícil de resolver. Tendrías que hacer algo como almacenarlo en codificación base64.Lo mismo que sugirió @bmike pero sin wget
lo cual no es nativo de OS X
curl -so- 'https://www.example.com/some.pdf' | open -f -a Preview.app
bmike
marca mavis
gordon davisson