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

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

最後更新日期:2019 年 7 月 19 日

如果你在寫 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 來執行。

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

支持阿璋的新書《打開網路就有錢》,裡面分享許多自媒體以及投資理財的知識,非常適合網路創業者以及想要增加額外收入的上班族閱讀。

打開網路就有錢 呂明璋(工具王阿璋)


如果你對幣圈資訊有興趣,可以訂閱此電子報:幣圈最新資訊

我目前有成立一個亞洲最大的幣圈自媒體 Discord 社群:Crypto Mind 加密腦

推坑阿璋超愛的商品,歡迎加入團購群:阿璋好物團購 LINE 社群

12篇文章手把手教你如何透過部落格開始賺錢:站長之路

更多相關社群連結:工具王阿璋社群列表

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

如果我的文章對你有幫助,歡迎贊助我一杯咖啡!

本站所有內容皆為阿璋個人經驗分享,如有涉及投資請謹慎評估,阿璋不做任何投資建議。

贊助我一杯咖啡

文章引用請來信索取授權,否則將保留法律追訴權。

by Johntool-工具王阿璋

發表迴響

返回頂端