- 前言
曾几何时我一直在思考一个问题,如何写好一篇技术文章,大多数人并不会仔细的看一篇技术文章,通常都是在寻找“答案”,其实谁又不是哪?我也是在工作中出现问题的时候,才会到网上去搜索,但是你是否曾经对古龙的小说产生过兴趣哪?在《陆小凤传奇》系列中大家跟随着陆小凤破解一个一个的案子,你肯定也会好奇为什么西门吹雪要追杀陆小凤? 在《七种武器》中大家惊叹每一种武器背后的道理,所以我说的第一种武器,并不是剑,而是笑,只有笑才能真正的征服人心。所以当你懂得这道理,就应该收起你的剑来多笑一笑、在《欢乐英雄》中那个“房子”里的每一个人物都是来头不小,那又是为什么现在都看似碌碌无为、颓废度日哪?他们经历了什么哪?所以大家紧跟着作者的思维来看清每一个答案!
-
奇怪的一件事儿
大家是否会有这样的感觉,那就是每天都在你身边的人,并且你自以为很了解他,但是突然有一天他做了一件让你意想不到的事,你开始对他“刮目相看”,你发现你并不是很了解他,他让你感到非常的陌生,这种感觉自然会让你很不爽,你会觉得非常的奇怪,哎~~~,那么为了满足自己的猎奇心理,你就开始探寻问题的答案,这件奇怪的事儿就是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命令失效!
- 结尾
“天涯远不远?”
“不远!”
“人就在天涯,天涯怎么会远?”









网友评论