file1 does?"-6ren"> file1 does?"-当命令的输出重定向到文件时,输出文件会在执行命令之前由 shell 创建或截断,知道 cat foo > foo 会做什么吗? 最佳答案 在所有情况下,文件都会被截断。这是因为重定向是由 shell -6ren">
gpt4 book ai didi

redirect - 在 UNIX 中什么是 "cat file1 > file1 does?"

转载 作者:行者123 更新时间:2023-12-01 21:43:23 29 4
gpt4 key购买 nike

当命令的输出重定向到文件时,输出文件会在执行命令之前由 shell 创建或截断,知道 cat foo > foo 会做什么吗?

最佳答案

在所有情况下,文件都会被截断。这是因为重定向是由 shell 处理的,它会在调用命令之前打开文件进行写入。

cat foo > foo

shell 截断并打开 foo 进行写入,将 stdout 设置为文件,然后执行 exec 的 ["cat", "foo"]

GNU cat 很聪明,拒绝将文件重定向到自身。它通过检查输入和输出文件描述符上的设备/ inode 对来实现这一点;您可以在src/cat.c中阅读精彩的底层细节。 。它打印一条消息并退出。

BSD cat 没有这样的安全性,但是由于文件已经被截断,所以没有东西可读,没有东西可写,并且它会停止。

<小时/>

您可以通过附加而不是截断来让事情变得有趣一点。

echo hello > foo
cat foo >> foo

现在一切都一样了,只是 shell 打开文件进行追加而不是截断它。

GNU 猫看到你在做什么并停下来;文件未受影响。

BSD cat 进入循环并将文件追加到自身,直到磁盘填满。

关于redirect - 在 UNIX 中什么是 "cat file1 > file1 does?",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3887771/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com