Re: [問題] 請問在bash底下使用cd指令
※ 引述《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)
推
01/20 11:28, , 1F
01/20 11:28, 1F
推
01/22 12:43, , 2F
01/22 12:43, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 4 篇):