shell 十三問? 11) 與 差在哪?
转自:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=218853&page=7#pid1636825
shell 十三問?
11) > 與 < 差在哪?
這次的題目之前我在 CU 的 shell 版已說明過了: -------------- 程式的運算,在大部份情況下都是進行數據(data)的處理, 在 shell 程式中,最常使用的 FD 大概有三個,分別為: 在標準情況下,這些 FD 分別跟如下設備(device)關聯: 我們可以用如下下命令測試一下:
复制代码 很明顯,mail 程式所讀進的數據,就是從 stdin 也就是 keyboard 讀進的。
复制代码 但,要是 cat 之後沒有檔案參數則又如何呢?
复制代码 (請留意數據輸出到哪裡去了,最後別忘了按 ^d 離開...) 至於 stdout 與 stderr ,嗯... 等我有空再續吧... ^_^ -------------- 相信,經過上一個練習後,你對 stdin 與 stdout 應該不難理解吧?
复制代码 若,一個命令同時產生 stdout 與 stderr 呢?
复制代码 okay,至此,關於 FD 及其名稱、還有相關聯的設備,相信你已經沒問題了吧? 比方說:
复制代码 就是從 my.file 讀進數據
复制代码 則是從 /etc/passwd 讀進... okay,這個好理解吧?
复制代码 這樣的話,cat 會讀進 3 行句子,而無需從 keyboard 讀進數據且要等 ^d 結束輸入。 至於 > 又如何呢? -------------- 當你搞懂了 0< 原來就是改變 stdin 的數據輸入通道之後,相信要理解如下兩個 redirection 就不難了: 用上次的 ls 例子來說明一下好了:
复制代码 這樣 monitor 就只剩下 stderr 而已。因為 stdout 給寫進 file.out 去了。
复制代码 這樣 monitor 就只剩下 stdout ,因為 stderr 寫進了 file.err 。
复制代码 這樣 monitor 就啥也沒有,因為 stdout 與 stderr 都給轉到檔案去了... 呵~~~ 看來要理解 > 一點也不難啦﹗是不?沒騙你吧? ^_^ 首先,是同時寫入的問題。比方如下這個例子:
复制代码 假如 stdout(1) 與 stderr(2) 都同時在寫入 file.both 的話, 那,如何解決呢?所謂山不轉路轉、路不轉人轉嘛,
复制代码 這樣,不就皆大歡喜了嗎? 呵~~~ ^_^ 不過,光解決了同時寫入的問題還不夠,我們還有其他技巧需要了解的。 -------------- 學佛的最高境界,就是"四大皆空"。至於是空哪四大塊?我也不知,因為我還沒到那境界... 在 Linux 檔案系統裡,有個設備檔位於 /dev/null 。 這個 null 在 I/O Redirection 中可有用得很呢:
复制代码 若要相反:只想看到 stderr 呢?還不簡單﹗將 stdout 弄到 null 就行:
复制代码 那接下來,假如單純只跑程式,不想看到任何輸出結果呢?
复制代码 (提示:將 &> 換成 >& 也行啦~~! ) okay?講完佛,接下來,再讓我們看看如下情況:
复制代码 看來,我們在重導 stdout 或 stderr 進一份檔案時,似乎永遠只獲得最後一次導入的結果。
复制代码 如此一來,被重導的目標檔案之內容並不會失去,而新的內容則一直增加在最後面去。 但,只要你再一次用回單一的 > 來重導的話,那麼,舊的內容還是會被"洗"掉的﹗
复制代码 那,要如何取消這個"限制"呢?
复制代码 再問:那... 有辦法不取消而又"臨時"蓋寫目標檔案嗎?
复制代码 留意到沒有:在 > 後面再加個" | "就好(注意: > 與 | 之間不能有空白哦).... 呼.... (深呼吸吐納一下吧)~~~ ^_^
复制代码 嗯?﹗注意到沒有?﹗﹗ 同學們:下節課不要遲到囉~~~! -------------- 前面提到:$ cat < file > file 之後原本有內容的檔案結果卻被洗掉了﹗ 哦~~~ 原來如此~~~~ ^_^
复制代码 嗯... 同學們,這兩個答案就當練習題囉,下節課之前請交作業﹗ 好了,I/O Redirection 也快講完了,sorry,因為我也只知道這麼多而已啦~~~ 嘻~~ ^_^ 談到 pipe line ,我相信不少人都不會陌生: 不過... 然而... 但是... ... stderr 呢? 那,或許你又會問: 或許,你仍意尤未盡﹗或許,你曾經碰到過下面的問題: 若你寫成 cm1 | cm2 > file | cm3 的話,
复制代码 是的,你的確可以這樣做,但最大的壞處是:這樣一來,file I/O 會變雙倍﹗ 那,上面問題還有更好方法嗎?
复制代码 在預設上,tee 會改寫目標檔案,若你要改為增加內容的話,那可用 -a 參數達成。 基本上,pipe line 的應用在 shell 操作上是非常廣泛的,尤其是在 text filtering 方面, .... 好了,關於 I/O Redirection 的介紹就到此告一段落。 |
shell 十三問? 11) 與 差在哪?相关推荐
- shell 十三問 lt;转gt;
shell 十三問 作者 网中人 我在 CU 的日子並不長,有幸在 shell 版上與大家結緣.除了跟眾前輩學習到不少技巧之外,也常看到不少朋友的問題.然而,在 ...
- shell十三问之11:与 差在哪?
shell十三问之11:>与< 差在哪? 这次的题目,之前我在CU的shell版说明过了: (原帖的连接在论坛改版后,已经失效) 这次我就不重写了,将帖子的内容"抄"下 ...
- 动态T-SQL语句常見問題與解決方案
--> Title : 动态T-SQL语句常見問題與解決方案 --> Author : wufeng4552 --> Date : 2009-11-24 10:11:10 if ...
- Java第十二天~第十三天/11.04~11.05
第十二天/11.04 一.选择排序 从0索引开始,用它对应的元素依次和后面索引对应的元素进行比较,小的往前放,第一次比较完毕后,最小值出现在最小索引处,依次比较,就可以得到一个排好序的数组. pack ...
- shell十三问-11) 与 差在哪
這次的題目之前我在 CU 的 shell 版已說明過了: (原貼連結在論壇改版後已經失效) 這次我就不重寫了,將貼子的內容"抄"下來就是了... -------------- 11 ...
- linux怎么退出shell编程,Linux Shell编程(11)——退出和退出状态
exit命令一般用于结束一个脚本,就像C语言的exit一样.它也能返回一个值给父进程. 每一个命令都能返回一个退出状态(有时也看做返回状态).一个命令执行成功返回0,一个执行不成功的命令则返回一个非零 ...
- Shell十三问之十一:与差在哪
11.1 谈到 I/O redirection ,不妨先让我们认识一下 File Descriptor (FD) . 程序的运算,在大部份情况下都是进行数据(data)的处理, 这些数据从哪读进?又, ...
- shell实例第11讲:取出系统IP地址,并判断属于哪个网段
取出系统IP地址,并判断属于哪个网段 #!/bin/bash #作者:魏波 #时间:2017.02.04ip=`ifconfig -a | grep inet | grep -v 127.0.0.1 ...
- [转载]shell 十三问?
原文地址:shell 十三问?作者:Biot UNIX Shell 好贴: shell 十三問? http://bbs.chinaunix.net/viewthread.php?tid=218853& ...
最新文章
- python与R行列数据过滤(row column filtering):dplyr、 isnull、isna、drop、select、iloc、loc、isin、filter
- python 命令行参数-Python处理命令行参数
- cuda 5.0配置vs2008+Visual Assist X +安装问题解决
- List VS Set
- 一则 Oracle 和 SqlServer 语法区别 (原创)
- MS SQL SERVER2005更新触发器
- 论文笔记《BERT》
- matlab微带带通滤波器,带通滤波器的ADS仿真设计
- linux运行sokit,mac下的socket调试工具---sokit
- 建立ad-hoc网络 // 电脑设置wifi热点 (Win10)
- 民生服务是“双创”永恒主题 且听“鸿雁旅居网”、“熊猫中医”谈背后心路历程...
- SpringBoot日志文件
- css3魔方3乘3每层旋转_CSS3 旋转魔方效果
- php spa结合,SPA最佳实践
- 运输费用在ERP 系统中是如何处理
- xes java to c_5个最优秀的java和c#代码转换工具
- 武汉智慧工地管理系统能帮助建筑施工提升质量吗?
- 左侧广告html,侧栏广告.html
- 大前端开箱即用的中后台管理模版,建议收藏
- 【广州华锐互动】采煤机VR虚拟仿真实训教学系统
热门文章
- 无法找到模块“vue-contextmenu”的声明文件
- 代码注入之远程线程篇 转载自 Zachary.XiaoZhen - 梦想的天空
- MFC中的文件对话框类CFileDialog详解
- Hive总结 --hive表的创建,删除和修改
- Nature子刊 | 周集中团队揭示长期气候变暖导致草地土壤微生物多样性降低
- Shell中` `与$()的区别
- 呕心沥血整理的的嵌入式学习路线
- 如何与客户高效地沟通需求
- 第一款自己的RPG游戏--生成心中的世界(二)
- 一维波动方程求解matlab,MATLAB编辑一维波动方程的模拟的程序