2012-02-08 94 views
0

我的程序生成两个字符串,我希望它们通过外部diff工具进行比较。 diff工具只接受文件/目录作为参数。这是diff file1 file2完美的作品,但diff "hello" "world"不起作用。有没有办法将我的字符串直接传递到diff而不创建任何临时文件?谢谢。php将字符串传递给外部diff命令

+0

什么是 “外部比较工具”? – Richard 2012-02-08 13:48:11

+0

您正在使用什么prograsm进行比较? (请详细说明) – bizzr3 2012-02-08 13:48:52

+0

linux diff工具。只需$> diff – Shawn 2012-02-08 13:50:10

回答

2

在外壳上,可以使用临时管道。

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

使用反引号运算符或任何其他方法在php中执行命令。有关执行命令的详细信息,请参阅手册:http://www.php.net/manual/en/ref.exec.php

确保你正确转义字符串。

编辑:此功能称为临时管道。因此,shell将其转换为文件描述符。

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

有关详细说明,请参见http://www.linuxjournal.com/article/2156?page=0,1

+0

作品!你能否详细说明<(echo“string 1”)如何模拟shell中的文件? – Shawn 2012-02-08 14:14:09

+0

AFAIK它只是将两个管道连接到diff命令,就像两个STDIN一样。但我不知道为什么以及它是如何工作的。这就是为什么我问了下面的问题:http://stackoverflow.com/questions/9195117/two-pipes-to-one-command – iblue 2012-02-08 14:21:35

+0

也许这解释了它?没问题。http://www.linuxjournal.com/article/2156?page=0,1 – Shawn 2012-02-08 14:31:33