如何不存文件用Linux file命令判断程序STDOUT的文件类型
解决方法
不用临时文件的话,有两种简单直接的方式可以实现需求:
方法一:利用file的标准输入参数
file命令本身支持从标准输入读取内容,只需要传入-作为参数即可,执行命令如下:
myprogram | file -
这条命令会让file直接分析myprogram输出到管道的内容,直接返回对应的文件类型,全程不会生成磁盘文件。
方法二:使用bash进程替换
bash的进程替换功能可以把命令的输出包装成一个可读取的“虚拟文件”,直接供file调用,命令格式为:
file <(myprogram)
这里的<(myprogram)会让bash创建一个指向myprogram输出管道的特殊文件(比如/dev/fd/63),file读取这个文件就等价于读取myprogram的输出,同样不会生成实际磁盘文件。
为什么你之前的命令失败?
你尝试的myprogram | file <(cat /dev/stdin)逻辑有误:管道将myprogram的输出传给file的标准输入,但<(cat /dev/stdin)里的cat,它的标准输入是当前终端的stdin,而非myprogram的输出,两者输入源不关联,才会出现链接失效的错误。
内容的提问来源于stack exchange,提问作者puterboy
相关产品推荐
相关产品推荐

