2012-02-08 2 views
0

Моя программа генерирует две строки, и я хочу, чтобы они сравнивались с внешним инструментом diff. Инструмент diff принимает только файлы/каталоги в качестве аргументов. Это diff file1 file2 работает отлично, но diff "hello" "world" не работает. Есть ли способ передать мои строки непосредственно на diff без создания временных файлов? Благодарю.php, передающий строки для внешней команды diff

+0

Что "внешний инструмент сравнения"? – Richard

+0

какой программ вы используете для diff? (подробнее просьба) – bizzr3

+0

The linux diff инструмент. Просто $> diff – Shawn

ответ

2

На корпусе вы можете использовать временные трубы.

diff <(echo "string 1") <(echo "string 2") 

Используйте оператор backticks или любой другой метод для выполнения команды в php. Подробнее о выполнении команд см. В руководстве: http://www.php.net/manual/en/ref.exec.php

Убедитесь, что вы правильно избегаете строк.

EDIT: Эта функция называется временными трубами. Таким образом, оболочка переводит его в дескриптор файла.

[email protected]:~$ echo <(echo "string") 
/dev/fd/63 
[email protected]:~$ cat <(echo "string") 
string 

Для детального объяснения см http://www.linuxjournal.com/article/2156?page=0,1

+0

Работает! Не могли бы вы объяснить, как <(эхо-строка 1 ") может имитировать файл в оболочке? – Shawn

+0

AFAIK Он просто присоединяет две трубы к команде diff, как два STDIN. Но я не знаю, почему и как это работает. Вот почему я задал следующий вопрос: http://stackoverflow.com/questions/9195117/two-pipes-to-one-command – iblue

+0

Возможно, это объясняет это? http://www.linuxjournal.com/article/2156?page=0,1 – Shawn

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