1 votes

Comment ouvrir un PDF en tant que variable BASH ?

Je tente d'ouvrir un PDF en utilisant Aperçu où le fichier d'entrée est une variable 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

J'obtiens toujours la même erreur :

-bash: /usr/bin/open: Argument list too long

Est-il possible de faire cela ?

exemple de PDF pour ceux qui veulent essayer :

https://www.exploit-db.com/docs/english/44592-linux-restricted-shell-bypass-guide.pdf

3voto

Oskar Points 1242

Problème cool montrant à quel point bash, pipes et open sont incroyables. Vous êtes si proche au quatrième essai:

wget -qO- 'https://www.com/big.pdf' | open -f -a Preview.app

Heureusement, l'argument -a permet au -f de prendre les données depuis stdin mais de ne pas les ouvrir dans TextEdit.

1voto

Dials Mavis Points 126

Vous pouvez ouvrir un PDF en tant que variable Bash (exprimée sous forme de chemin d'accès au fichier) comme ceci.

  1. Définissez votre variable :

    pdf=/chemin/vers/44592-linux-restricted-shell-bypass-guide.pdf
  2. Ouvrez le fichier de cette manière :

    open "$pdf" -a Preview

Cependant, votre exemple indique que le fichier n'existe pas sur votre système de fichiers. Si vous souhaitez ouvrir un flux de données brut stocké dans une variable, je recommande d'afficher votre variable et de le rediriger vers open en utilisant l'option -f comme ceci.

  1. Définissez votre variable :

    pdf=$(wget -qO- https://www.exploit-db.com/docs/english/44592-linux-restricted-shell-bypass-guide.pdf)
  2. Ouvrez les données brutes en tant que flux depuis l'entrée standard :

    echo $pdf | open -f -a Preview

Explication : Si vous stockez la sortie de wget -qO- … en tant que variable, au lieu de télécharger le fichier sur votre système de fichiers, open ne saura pas quoi faire car vous lui transmettez les données brutes du fichier plutôt que le chemin d'accès au fichier. Dans le manuel de open, le terme ‘file’ fait référence à un fichier pouvant être ouvert par l'application donnée, ce qui n'est pas le cas de la variable dans votre exemple. L'option -f est utile dans ce scénario car votre méthode de définition de la variable implique le stockage de l'intégralité du flux de fichiers, ce qui ne sera pas interprété comme un fichier par open, et donc il ne peut être ouvert que comme un flux de fichiers.

0voto

Igor Voltaic Points 252

La même chose que @bmike a suggéré mais sans wget qui n'est pas natif à OS X

curl -so- 'https://www.example.com/some.pdf' | open -f -a Preview.app

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X