Qix*_*TED 47 shell bash io-redirection
cat < file将文件的内容打印到标准输出。
cat > file读取 stdin 直到检测到Ctrl+D并将输入文本写入file。
cat <> file,至少在我的 Bash 版本中,愉快地打印文件的内容(没有错误),但不修改文件,也不更新修改时间戳。
Bash 标准如何证明>第三条语句中看似被忽略的内容是正确的——更重要的是,它是否在做任何事情?
Mic*_*mer 51
Bash 用于<>创建读写文件描述符:
重定向运算符
Run Code Online (Sandbox Code Playgroud)[n]<>word导致名称为 word 扩展的文件被打开,以便在文件描述符 n 上读取和写入,如果未指定 n,则在文件描述符 0 上打开。如果文件不存在,则创建它。
cat <> file打开file读写并将其绑定到描述符 0(标准输入)。它本质上等同< file于任何明智编写的程序,因为通常没有人可能尝试写入标准输入,但如果有人这样做,它就可以。
你可以写一个简单的C程序直接测试出来-write(0, "hello", 6)将写入hello到file通过标准输入。
<>也应该在任何其他符合 POSIX 的 shell 中工作,具有相同的效果。
Sté*_*las 46
<> file<以读+写模式打开文件(默认情况下在文件描述符 0 (stdin) 上,例如),而不会截断,如果事先不存在则创建文件。
这对应于O_RDWR|O_CREAT传递给open()系统调用的标志。相比之下<是O_RDONLY和>是O_WRONLY|O_CREAT|O_TRUNC和>> O_WRONLY|O_CREAT|O_APPEND。
由于应用程序通常不会写入其标准输入,因此标准输入可写通常并不有用。应用程序通常不希望读取和写入它们在启动时收到的文件描述符;他们通常从 stdin(或他们自己打开的文件描述符)读取并写入 stdout 或 stderr(或他们自己打开的文件描述符)。
<> 可以有它的用途:
cat <> file过cat < file,如果你不希望命令,如果失败,file不存在,但空的file创建来代替。的非截断方面<>使得在适当位置覆盖文件非常有用。但是,在这种情况下,您通常不会在文件描述符 0 上使用它:
printf xxx 1<> file
Run Code Online (Sandbox Code Playgroud)
取代了前3个字节的file用xxx。
在 Linux<>等某些系统上,在命名管道 (FIFO) 上打开命名管道而不会阻塞(无需等待其他进程打开另一端),并确保管道结构保持活动状态。例如在:
mkfifo pipe; sed 's/foo/bar/g' <> pipe
Run Code Online (Sandbox Code Playgroud)
sed处理来自写入它的任意数量的其他进程的传入数据,并且永远不会看到eof.
| 归档时间: |
|
| 查看次数: |
13732 次 |
| 最近记录: |