Re: [問題] 請問在bash底下使用cd指令

看板Linux作者 (小軟哥)時間10年前 (2014/01/20 02:47), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串3/4 (看更多)
※ 引述《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
文章代碼(AID): #1It1tUw3 (Linux)
文章代碼(AID): #1It1tUw3 (Linux)