2017-01-07 2 views
1

Я пытаюсь передать файл JPEG из программы «Преобразование» Магика в другие программы командной строки в другом, чтобы сделать тест. Есть ли способ заставить программу, которая не имеет встроенной функции для чтения из канала, вместо чтения файла с диска?Piping Образ потока к программам командной строки в Bash

Пример программы, которая имеет такую ​​встроенную функциональность «CJPEG»:

convert INFILE.JPG tga:- | cjpeg -outfile OUTFILE.JPG -targa 

Пример программы, которая не «:

jpegoptim --dest OUTFOLDER INFILE.JPG 

В идеале было бы работать как это (но это не делает):

convert INFILE.JPG jpg:- | jpegoptim --dest OUTFOLDER - 

мне удалось сделать это, хотя:

BASE64_IMG=$(convert INFILE.JPG jpg:- | base64) 

И:

JPG<(echo "${BASE64_IMG}" | base64 --decode) /dev/stdin | awk '{print $1}' 

Но я не знаю, что делать с этим ...

Спасибо за любую помощь.

+1

В моей версии 'jpegoptim' есть опция' --stdin' для чтения со стандартного ввода. Он также обрабатывает '-' для чтения со стандартного ввода. –

+0

Какой номер версии вы используете? – Roger

+0

'jpegoptim v1.4.1 x86_64-pc-linux-gnu'. –

ответ

1

Вы можете использовать замещение процесса, , если программа чтения не ожидает, что сможет искать случайные позиции внутри входа. (То есть, он может читать только с самого начала файла.)

Неверная версия (программы должны быть записаны для принятия - в качестве имени файла, означающего стандартный ввод, это не то, что делает оболочка для вас):

convert INFILE.JPG jpg:- | jpegoptim --dest OUTFOLDER - 

становится

jpegoptim --dest OUTFOLDER <(convert INFILE.JPG jpg:-) 

<(...) специальный bash синтаксис для упрощения использования именованного канала.

mkfifo input      # Create a named pipe called "ipnut" 
convert INFILE.JPG jpg:- > input & # Start writing to it in the background 
jpegoptim --dest OUTFOLDER input # Read from the named pipe; convert blocks until jpegoptim opens the pipe for reading 
rm input       # Clean up after you are done 
+0

Даже после описанных выше шагов я не смог заставить его работать правильно. – Roger

Смежные вопросы