避免在Bash命令中使用临时文件。

5

我正尝试使用一些bash技巧避免创建一个临时文件(例如t12.txt),但没有成功。

假设有两个文件t1.txtt2.txt,其中包含一些文本行。

以下是一个有效的命令示例:

$ cat t1.txt t2.txt > t12.txt
$ tac t2.txt t1.txt | tac | diff - t12.txt

现在我正在尝试避免使用任何东西来创建t12.txt,包括管道和奇怪的重定向。

我尝试过不同顺序和测试的命令,例如:$(cat t1.txt t2.txt)< <(cat t1.txt t2.txt)

这里有什么有创意的建议吗?谢谢。

1个回答

8
这应该能完成任务:
diff <(cat t1.txt t2.txt) <(tac t2.txt t1.txt)

这只是在/dev/fd创建临时文件描述符,分别用于cat t1.txt t2.txttac t2.txt t1.txt的输出。


谢谢!完美。我之前错误地使用了<<(command)。那是为什么呢? - DrBeco
1
如果我没记错的话,cmd1 < <(cmd2) 会将临时文件描述符中指向 cmd2 输出的内容重定向到 cmd1 的 stdin,因此它应该等同于 cmd2 | cmd1 - Siguza
这很有道理。调查此命令无瑕疵:diff <(cat t1.txt t2.txt) - < <(tac t2.txt t1.txt | tac) - DrBeco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接