在外壳程序脚本中使用带括号的命令,例如diff

时间:2019-07-11 02:14:21

标签: shell diff

我想比较2条命令的输出

来自

diff的输出 cat file1 cat file2

我发现解决方法是

diff <(cat file1) <(cat file2)

但是

如果我将其放入外壳脚本中 括号无法识别,因为它意味着在shell脚本中调用sub-shell。(我想知道我所知道的是否正确)

#!bin/bash
diff <(cat $1) <(cat $2)
意外令牌'('

附近的

语法错误

在shell脚本中是否有解决方案使用需要括号的命令?

我尝试过

 diff `<(cat $1) <(cat $2)`
 diff `<(cat $1)` `<(cat $2)`
 diff "<(cat $1) <(cat $2)"
 diff <`(`cat $1`)` <`(`cat $2`)`

但以上方法均无效

我曾经将输出转储到其他文件并比较这些文件

cat $1 > out1.txt
cat $2 > out2.txt
diff -b out1.txt out2.txt

我知道这可行,但是我只是想知道是否有任何方法无需事先将输出转储到文件中

2 个答案:

答案 0 :(得分:1)

如果编写包含bash命令的脚本,则需要使用bash而不是sh运行它。 (考虑:您希望rm scriptfile运行文件中包含的bash命令吗?)

如果您想要更便携的东西,可以显式使用FIFO(特别是mkfifo命令):

#!/bin/sh

mkfifo fifo1 fifo2
cat "$1" >>fifo1 &
cat "$2" >>fifo2 &
diff -b fifo1 fifo2
rm fifo1 fifo2

答案 1 :(得分:0)

我尝试了这个test.sh并获得了正确的输出。

#! /bin/bash
diff <(cat $1) <(cat $2)