作者Microscft (小软哥)
站内Linux
标题Re: [问题] 请问在bash底下使用cd指令
时间Mon Jan 20 02:47:54 2014
※ 引述《layumi (虔心向学)》之铭言:
: 不好意思 , 小弟是linux新手 , 最近想自己写个简单bash shell
: 目前执行的bash档案在/home/123底下
: 想要执行bash档案之後让目录变成 /home/456
: 因此内容写成
: #!/bin/bash
: cd /home/456
: 结果跑完之後路径还是在 /home/123
: 请问我该怎麽让目录跑到/home/456呢 0.0?
: 先谢过 !!
讲讲观念的东西...
直接在shell用"指令(enter)"
或 "sh 指令(enter)"
叫做fork-exec
这时你的shell就会fork一个child process (shell本身是parent process)
也就是产生一个新的PID
parent process会等待child process执行完成後再回到parent process
google到一张图可以一目了然
http://ppt.cc/8GMw
(proc A就是parent process,proc B则是fork出来的child process
图片右下那段话先不用理他,那是另一个故事)
这时你这个script是在child process内执行
执行完成後exit,回到parent process
这个script的结果在child process内就terminate了
所以你看不到结果,只看到shell原本的状态
要避开fork-exec有两个方法:
一种是推文和回文已经有版友提过的"source 指令(enter)"
另一种就是"exec 指令(enter)"
source是让指令在原本process内执行(也就是你正在用的shell)
以你的问题来看,source应该是你要的
而exec也是让指令在原本process内执行
(确切来说,是shell的process被取代为所执行的指令,没有fork,直接被取代)
不同的是,执行结束後process本身会exit
也就是原本的shell也回不去惹
这是很基本的观念并不难
希望我说那麽多不会让你觉得很复杂
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.231.4.204
※ 编辑: Microscft 来自: 61.231.4.204 (01/20 03:12)
1F:推 wgst88w:呜~~你们都好强... 01/20 11:28
2F:推 menesn:推认真好文 01/22 12:43