Я пытаюсь открыть PDF-файл с помощью предварительного просмотра, где входной файл представляет собой оболочку var:
$ 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 -
и т.д. и т.п.
Я всегда получаю ту же ошибку:
-bash: /usr/bin/open: слишком длинный список аргументов
Можно ли сделать это?
пример PDF для тех, кто хочет попробовать:
https://www.exploit-db.com/docs/english/44592-linux-restricted-shell-bypass-guide.pdf
Крутая задачка, показывающая, насколько хороши bash, pipe и open. Ты так близок с четвертой попытки:
wget -qO- 'https://www.com/big.pdf' | open -f -a Preview.app
К счастью, -a
аргумент позволяет -f
брать данные со стандартного ввода, но не открывать их в TextEdit.
Вы можете открыть PDF как переменную Bash (выраженную как путь к файлу) следующим образом.
Установите свою переменную:
pdf=/path/to/44592-linux-restricted-shell-bypass-guide.pdf
Откройте файл следующим образом:
open "$pdf" -a Preview
Однако ваш пример указывает на то, что файл не существует в вашей файловой системе. Если вы хотите открыть необработанный поток данных, хранящийся в переменной, я рекомендую повторить вашу переменную и передать ее по конвейеру с помощью open
такой -f
опции.
Определите свою переменную:
pdf=$(wget -qO- https://www.exploit-db.com/docs/english/44592-linux-restricted-shell-bypass-guide.pdf)
Откройте необработанные данные в виде потока из стандартного ввода:
echo $pdf | open -f -a Preview
Объяснение: если вы сохраните вывод wget -qO- …
как переменную, а не загрузите файл в свою файловую систему, он open
не будет знать, что делать, поскольку вы передаете ему необработанные данные файла, а не путь к файлу. В man open
«файле» имеется в виду открываемый файл для данного приложения, переменная в вашем примере не такова. Этот -f
параметр полезен в этом сценарии, так как ваш метод установки переменной предполагает сохранение всего файлового потока, который не будет интерпретироваться как файл open
, и поэтому его можно открыть только как файловый поток.
echo
добавляет новую строку в конец того, что он печатает. Вы можете решить две последние задачи, используя printf "%s" "$pdf"
вместо echo $pdf
, но первую решить сложнее. Вам нужно будет сделать что-то вроде сохранения в кодировке base64.То же самое, что предложил @bmike, но без wget
чего не является родным для OS X
curl -so- 'https://www.example.com/some.pdf' | open -f -a Preview.app
bmike
Набирает Мэвис
Гордон Дэвиссон