- 前言
曾几何时我一直在思考一个问题,如何写好一篇技术文章,大多数人并不会仔细的看一篇技术文章,通常都是在寻找“答案”,其实谁又不是哪?我也是在工作中出现问题的时候,才会到网上去搜索,但是你是否曾经对古龙的小说产生过兴趣哪?在《陆小凤传奇》系列中大家跟随着陆小凤破解一个一个的案子,你肯定也会好奇为什么西门吹雪
要追杀陆小凤
? 在《七种武器》中大家惊叹每一种武器背后的道理,所以我说的第一种武器,并不是剑,而是笑,只有笑才能真正的征服人心。所以当你懂得这道理,就应该收起你的剑来多笑一笑
、在《欢乐英雄》中那个“房子”里的每一个人物都是来头不小,那又是为什么现在都看似碌碌无为、颓废度日哪?他们经历了什么哪?所以大家紧跟着作者的思维来看清每一个答案!
奇怪的一件事儿
大家是否会有这样的感觉,那就是每天都在你身边的人,并且你自以为很了解他,但是突然有一天他做了一件让你意想不到
的事,你开始对他“刮目相看”,你发现你并不是很了解他,他让你感到非常的陌生,这种感觉自然会让你很不爽,你会觉得非常的奇怪,哎~~~,那么为了满足自己的猎奇心理,你就开始探寻问题的答案,这件奇怪的事儿就是cd
命令,这个每天差不多敲100遍的命令今天竟然失效了!!!,竟然切换不到指定的目录了,那么这是怎么一回事儿哪?问题来了
大家都知道find
命令可以定位文件或目录的路径、cd
命令可以切换当前的工作目录例:
etl@bejedw09:/home/etl/cya_2/as/one> find . -name dir_1
./dir_1
etl@bejedw09:/home/etl/cya_2/as/one> cd dir_1
etl@bejedw09:/home/etl/cya_2/as/one/dir_1
于是乎我写出了这样一段命令,以为这样可以一步切换到dir_1
目录中
etl@bejedw09:/home/etl/cya_2/as/one> find . -name dir_1 | xargs cd
etl@bejedw09:/home/etl/cya_2/as/one
结果cd
命令并没有改变当前的工作目录,我搜了好久类似这样的词条为什么cd命令在重定向语句中不起作用?
、cd命令不支持重定向
等等,结果根本查不到我要的答案,似乎陷入了一个死胡同里,那么我当时是怎么解决这个问题的哪?
-
分化、瓦解
看来直接搜问题的答案这条路走不通了,只能将问题分化开来,我首先关注的点是管道符
,我一直觉得是管道符
的问题,于是我查了管道符的使用
:
(1) 管道命令只能处理前一个命令的标准输出,而不能处理标准错误;
(2) 管道命令右边必须能够接收标准输入;咦~~~管道命令右边必须能够接收标准输入? 难道
cd
不能接收标准输入吗?继续查cd命令可以接收管道传来的数据吗
发现了cd
命令确实有些奇特,首先cd
命令是通过终端的命令行读取数据的,那么怎么向cd
这样的命令传值哪?可以使用反单引号`命令`或 $(命令) 这样的方式
etl@bejedw09:/home/etl/cya_2/as/one> cd `find . -name dir_1`
etl@bejedw09:/home/etl/cya_2/as/one/dir_1
etl@bejedw09:/home/etl/cya_2/as/one> cd $(find . -name dir_1)
etl@bejedw09:/home/etl/cya_2/as/one/dir_1
我在这里再解释一下这个命令find . -name dir_1 | xargs cd
,首先管道符|
将find
命令的返回值作为标准输出传递给cd
,而对于cd
命令而言,find
命令的返回值就是标准输入,而cd
是通过终端的命令行读取数据的,不接受标准输入,所以cd
命令失效!
- 结尾
“天涯远不远?”
“不远!”
“人就在天涯,天涯怎么会远?”