关于LINUX CAT命令
有一个文件f1.c,这个命令#cat<f1.c>f1.c为什么能把文件f1清空了?不太明白,请各位赐教?...
有一个文件f1.c ,这个命令#cat < f1.c > f1.c 为什么能把文件f1清空了?不太明白,请各位赐教?
展开
5个回答
展开全部
楼上的 f1.c清空的原理讲的正确 但是
$ cat < f1.c >> f1.c
会造成死循环 ,瞬间会造成巨大的文件 , 不要误导人了 呵呵
lz 要想明白这个 一定要了解<的到底是干什么的
对于你的命令 cat < f1.c > f1.c 表示
cat 命令以 f1.c 文件作为 stdin,同时以 f1.c 文件作为 stdout
一般的 ,linux中的文件都有一个标记叫做EOF ,End of File ,此标记表示为文本结束符 ,这样一来 f1.c的文件尾部就是EOF , 执行最后一步的重定向时 就将EOF重定向到了 f1.c ,这样 直接将一个EOF重定向到文件的时候表示将文件清空
其实你的命令等效于
$ cat << EOF > f1.c
>EOF
对于stdin来讲 它是忠实的呈现来源的各个字节的
这个例子没什么实用价值 也就是让人了解 < >的功能以及特点, 逻辑上来讲 从一个文件读入在重新输出到文件本身有什么意思呢.
$ cat < f1.c >> f1.c
会造成死循环 ,瞬间会造成巨大的文件 , 不要误导人了 呵呵
lz 要想明白这个 一定要了解<的到底是干什么的
对于你的命令 cat < f1.c > f1.c 表示
cat 命令以 f1.c 文件作为 stdin,同时以 f1.c 文件作为 stdout
一般的 ,linux中的文件都有一个标记叫做EOF ,End of File ,此标记表示为文本结束符 ,这样一来 f1.c的文件尾部就是EOF , 执行最后一步的重定向时 就将EOF重定向到了 f1.c ,这样 直接将一个EOF重定向到文件的时候表示将文件清空
其实你的命令等效于
$ cat << EOF > f1.c
>EOF
对于stdin来讲 它是忠实的呈现来源的各个字节的
这个例子没什么实用价值 也就是让人了解 < >的功能以及特点, 逻辑上来讲 从一个文件读入在重新输出到文件本身有什么意思呢.
快又稳
2024-10-28 广告
2024-10-28 广告
在Linux环境下配置基于域名的虚拟主机,需安装Apache或Nginx等Web服务器,并编辑配置文件。以Apache为例,需创建虚拟主机配置文件,指定域名、文档根目录等,然后启用该配置文件并重启Apache服务。同样,Nginx也需在相应...
点击进入详情页
本回答由快又稳提供
展开全部
应该和cat命令的处理机制有关,cat一行行的读取f1.c,然后一行行的重定向到f1.c,到最后就是文件结尾的空标志重定向到了f1.c,没有其他内容了,所以空了。
#cat < f1.c >> f1.c,有可能就不会清空f1了,你可以试一下。
#cat < f1.c >> f1.c,有可能就不会清空f1了,你可以试一下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
原因很简单,这个跟cat无关,是shell的问题:
> f1.c 表示如果f1.c不存在则创建该文件,如果存在就把该文件清空。也就是说shell在分析这个命令时,首先去判断f1.c存在否,在本例中它是存在的,所以shell把该文件清空,然后再把f1.c作为cat的标准输入和标准输出,其实cat拿到这个f1.c文件时,它已经是空的了
再说说 >> f1.c 这种,自己分析一下,先不要在电脑上面试,您能够分析出结果吗,分析出结果后再在电脑上面试,看分析结果是否跟实践结果一样,如果是,恭喜,搜获不小。如果没有分析对,也没啥,根据实践结果在回头来仔细理解,终会有所得!
> f1.c 表示如果f1.c不存在则创建该文件,如果存在就把该文件清空。也就是说shell在分析这个命令时,首先去判断f1.c存在否,在本例中它是存在的,所以shell把该文件清空,然后再把f1.c作为cat的标准输入和标准输出,其实cat拿到这个f1.c文件时,它已经是空的了
再说说 >> f1.c 这种,自己分析一下,先不要在电脑上面试,您能够分析出结果吗,分析出结果后再在电脑上面试,看分析结果是否跟实践结果一样,如果是,恭喜,搜获不小。如果没有分析对,也没啥,根据实践结果在回头来仔细理解,终会有所得!
参考资料: www.xueyusi.com
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
linux啊,这么厉害!佩服啊!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
cat
无法输出指定的最后10行的!
可以用tail,这个命令不加opt选项默认可以输出文件最后10行到标准输出!
你的要求可以这样写
tail
/etc/passwd
>
/etc/1.txt
上面的命令等价于:tail
-n
10
/etc/passwd
>
/etc/1.txt
其中选项-n
后面的10代表末尾的行数,可以根据需要修改!
无法输出指定的最后10行的!
可以用tail,这个命令不加opt选项默认可以输出文件最后10行到标准输出!
你的要求可以这样写
tail
/etc/passwd
>
/etc/1.txt
上面的命令等价于:tail
-n
10
/etc/passwd
>
/etc/1.txt
其中选项-n
后面的10代表末尾的行数,可以根据需要修改!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询