fbpx
首頁 » 程式語言 » Shell » 【程式語言】解決 shell script 無法 cd 的問題

【程式語言】解決 shell script 無法 cd 的問題

如果你在寫 shell script 的時候,遇到了 cd: can’t cd to … 的話,表示你遇到了一個坑,這篇文章教你如何解決這個問題。

【程式語言】解決 shell script 無法 cd 的問題
【程式語言】解決 shell script 無法 cd 的問題

問題來源

今天我在寫一支 shell script 時,在內容裡面寫了 cd 到某個目錄,結果發現 cd 失敗。

#!/bin/sh
cd /var

我得到的回應是:

test.sh: 2: cd: can’t cd to /var
: not found test.sh: ls

後來開始找了 Google ,找到了這篇文章:Why doesn’t “cd” work in a shell script?

我試了非常多回文中的方法,結果發現通通都失敗。

最後發現是編碼以及使用方法的雙重問題

 

解決方法

step 1

因為太常使用 Notepad ++ 這個超神編輯器,導致我的換行格式是採用 Windows ,所以在 Linux 上自然會失敗。

有兩種方法可以解決:

1. 在 Notepad++ 的工具列,編輯 -> 換行格式 -> 轉換成 UNIX 格式

轉換成 UNIX 格式
轉換成 UNIX 格式

2. 用 Linux 原生的編輯器編輯,我自己是習慣用 vi。

 

step 2

再來的問題就是 sh 與 source 指令的差別。

我覺得這篇回應講得很好,也不知道怎麼翻譯,直接貼上原文:What is the difference between using `sh` and `source`?

When you call source (or its alias .), you insert the script in the current bash process. So you could read variables set by the script.

When you call sh, you initiate a fork (sub-process) that runs a new session of /bin/sh, which is usually a symbolic link to bash. In this case, environment variables set by the sub-script would be dropped when the sub-script finishes.

簡單來說就是使用 sh 的環境變數會跟隨著 bash,我們無法控制。

所以當我要的 shell 有 cd 的時候,我應該使用 source test.sh 或是 . test.sh 來執行。

希望大家不要犯了跟我一樣的錯唷!

如果對文章內容有任何問題,歡迎在底下留言讓我知道。

如果你喜歡我的文章,可以按分享按鈕,讓更多的人看見我的文章。

還沒訂閱部落格的朋友們,記得在下方填入信箱,收到我最新文章的通知。

歡迎按讚我的粉絲專頁,會有最新文章、程式語言課程、WordPress主題外掛優惠的訊息。

追蹤我的Instagram,最近有一系列的#不務正業工程師、#工程師之路!

阿璋也陸續開始拍攝影片,訂閱我的 Youtube 頻道,並開啟小鈴鐺~

如果這篇文章對你有幫助,可以幫我在下方按 5 個Like,讓我得到一些回饋,支持我繼續寫出更多好文章!

阿璋有創立一個社團,歡迎加入!
WordPress / 部落格經營 / 網路行銷 | Johntool-工具王阿璋


本站有部分連結與商家有合作關係,透過我的連結購買,我會獲得少數佣金,讓我可以持續營運網站,但並不會影響您的任何權益,詳情查看免責聲明

by Johntool-工具王阿璋

訂閱我的文章

如果喜歡我的文章,可以留下信箱,每發佈新文章時,就會準時通知您!

發表迴響

Scroll Top