“Linux 基础入门”实验报告

数据流重定向

图片描述 关键步骤:将一个文件作为命令的输入,标准输出作为命令的输出:cat Documents/test.c; 将 echo 命令通过管道传过来的数据作为 cat 命令的输入,将标准输出作为命令的输出:echo 'hi' | cat; 将 echo 命令的输出从默认的标准输出重定向到一个普通文件:echo 'hello shiyanlou' > redirect cat redirect ②图片描述 关键步骤:先开启一个子 Shell:zsh; 使用exec替换当前进程的重定向,将标准输出重定向到一个文件:exec 1>somefile; ③图片描述 关键步骤:查看当前 Shell 进程中打开的文件描述符:cd /dev/fd/;ls -Al; ④作业:图片描述 关键步骤:这是想把 ls 命令的输出即当前目录的文件列表逐行读取出来,然后使用 rm -iv 在获得许可的情况下删除他们;现在的目录下存在名为:a、b、c、三个文件。那么运行这个程序后你会发现,虽然 rm 命令显示了询问是否删除的信息,但是 rm 完全没有关心你的回答,也就是整个程序没有删除一个文件,对计算机的指令它没有执行。 因为 rm -iv 期待用户从标准输入给出一个 y 或 n 的答案以确认是否删除,但标准输入被 < <(ls) 重定向了。于是 rm -iv 开始在 < <(ls) 里寻找答案。如果找不到 y 或者 n 就一直寻找下去,直到把 < <(ls) 的内容消耗完。这时在下一轮的循环中由于数据没有了, read 读不出数据,程序也就退出了。 解决方案:exec 3<&0 while read filename; do rm -iv $filename <&3 done < <(ls)

最新评论
暂无评论~