【Linux疑難雜症】關於pushd與popd的妙用

更新 發佈閱讀 3 分鐘
raw-image



我們偶爾在Linux的Bash腳本都會看到「pushd …」、「popd」的影子, 一開始看到也覺得這是什麼碗粿…, 這樣很難讀耶, 但指令被發明出來一定是有它存在的意義與道理的, 我們不能因為未知就直覺的認為該指令毫無作用, 而是要在正確的情境之下去使用。

pushd與popd我們就理解成資料結構中的堆疊, 首先是pushd的部份, 他就等同於cd某個目錄, 只是除了進入該目錄之外, 也會將前目錄路徑推入堆疊裡, 而搭配上popd就能夠切回上一層目錄, 過程中不需要另外宣告一個變數來特別記載進入前的目錄。

常用命令

dirs

呈現目前的目錄堆疊中有儲存著哪些路徑。

(base) ➜  Downloads dirs

~/Downloads

pushd

將目錄加到堆疊區之後, 再切換到目標目錄。

(base) ➜  Downloads pushd parent

# 這邊我們可以看到「~/Downloads/parent」被推入了堆疊區
~/Downloads/parent ~/Downloads

popd

刪除堆疊中的目錄後再切換到刪除的目錄。

(base) ➜  parent popd

# 這邊我們可以看到堆疊剩下最原本的目錄, 並且位置也進行了切換
~/Downloads
(base) ➜ Downloads

與cd cd cd …進行對比

我們就來舉一個例子來對比一下cd與pushd、popd的差異, 假設我們一樣有一的任務, 這個任務希望切換到指定目錄後進行git checkout後, 再回到原本目錄, 那麼兩種作法大致上如下:

首先以cd至目錄來說, 為了讓我們避免迷路, 我們會用標記的方式先記載當前位置, 一旦迷路還能夠跳回原點。

#!/bin/bash
# 為了避免迷路我們需要標記一下當前位置, 待事情完成後跳回
cur=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
cd prj
echo "git checkout ."
cd ${cur}

看到這邊, 不知道大家有沒有發現一個問題, 假設我們很常有cd來cd去之前, 是不是都得先多一個變數來標記呢? 這顯得有點冗餘, 故而我們可以這樣做…。

pushd prj
echo "git checkout ."
popd

讓pushd與popd成雙成對包住執行工作區, 如此一來讓我們在閱讀腳本時可以更加簡潔, 避免多餘的腳本變數宣告。

結語

雖然pushd、popd這類的指令在我們一般使用上比較少用到, 但以軟體開發的角度來開發腳時就會非常有用, 可以協助我們清楚的將目錄切換執行工作區塊標記出來, 也在完成工作時跳回原目錄, 就如同電影場景的時間暫停一般, 當時間恢復時, 一切既如往常, 但事實上我們看不到的背後已經完成重要的工作。

留言
avatar-img
阿Han的沙龍
148會員
317內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
阿Han的沙龍的其他內容
2024/12/04
當我們在Ubuntu下載 cursor 這套編輯工具並進行以下步驟安裝時: sudo apt-get install libfuse2 chmod +x cursor-0.42.5x86_64.AppImage ./cursor-0.42.4x86_64.AppImage sudo mv
Thumbnail
2024/12/04
當我們在Ubuntu下載 cursor 這套編輯工具並進行以下步驟安裝時: sudo apt-get install libfuse2 chmod +x cursor-0.42.5x86_64.AppImage ./cursor-0.42.4x86_64.AppImage sudo mv
Thumbnail
2024/06/25
咦! 怎麼啟動個docker compose up -d就出現了可疑的訊息: +] Running 2/2d orphan containers ([xxxx]) for this project. If you removed or renamed this service in your
Thumbnail
2024/06/25
咦! 怎麼啟動個docker compose up -d就出現了可疑的訊息: +] Running 2/2d orphan containers ([xxxx]) for this project. If you removed or renamed this service in your
Thumbnail
2023/12/19
情境描述 小明身為Linux系統工程師, 目前接到一個緊急任務, 需要在客戶端確保csv表的某個欄位的值不能重複, 對於軟體工程師來說只要寫個程式就能夠解決, 但客戶端並沒有相關的程式語言啊! 這時候只能夠使用現成的工具來完成,而經驗老道的我們很快就想到了解決方法, 不要急, 就讓我們一步
Thumbnail
2023/12/19
情境描述 小明身為Linux系統工程師, 目前接到一個緊急任務, 需要在客戶端確保csv表的某個欄位的值不能重複, 對於軟體工程師來說只要寫個程式就能夠解決, 但客戶端並沒有相關的程式語言啊! 這時候只能夠使用現成的工具來完成,而經驗老道的我們很快就想到了解決方法, 不要急, 就讓我們一步
Thumbnail
看更多
你可能也想看
Thumbnail
身為一個精打細算,又熱愛旅遊美食的家庭主婦,皮包裡有好幾張信用卡,每次都想著哪張卡要搭配哪個通路比較划算,著實讓人燒腦,這次玉山Unicard彷彿聽到我的心聲,百大消費通路全都給你優惠,讓你無腦消費,帶一張卡就可以輕鬆省錢,FUN心玩透透!
Thumbnail
身為一個精打細算,又熱愛旅遊美食的家庭主婦,皮包裡有好幾張信用卡,每次都想著哪張卡要搭配哪個通路比較划算,著實讓人燒腦,這次玉山Unicard彷彿聽到我的心聲,百大消費通路全都給你優惠,讓你無腦消費,帶一張卡就可以輕鬆省錢,FUN心玩透透!
Thumbnail
話說身為短線交易者,每天要作的事情就是從盤勢觀察、到籌碼流向,再到經過多維度資料數據交叉比對,盤中盯著分K、江波圖和五檔報價,算計著每一分K線的轉折,雖能換來即時驗證判斷的快感與成就,但長期下來,卻也衍生眼睛與肩頸卻成了抹不去的職業病。
Thumbnail
話說身為短線交易者,每天要作的事情就是從盤勢觀察、到籌碼流向,再到經過多維度資料數據交叉比對,盤中盯著分K、江波圖和五檔報價,算計著每一分K線的轉折,雖能換來即時驗證判斷的快感與成就,但長期下來,卻也衍生眼睛與肩頸卻成了抹不去的職業病。
Thumbnail
每天都在花錢,但你知道這些錢都能省下一筆嗎?玉山 Unicard 期間限定活動,結合日常高頻消費通路,提供最高 7.5% 的超有感回饋。文章將分享真實使用情境,教你如何聰明運用,讓每筆開銷都化為小確幸。
Thumbnail
每天都在花錢,但你知道這些錢都能省下一筆嗎?玉山 Unicard 期間限定活動,結合日常高頻消費通路,提供最高 7.5% 的超有感回饋。文章將分享真實使用情境,教你如何聰明運用,讓每筆開銷都化為小確幸。
Thumbnail
在先前的文章中說明了Linux大致上的安裝流程,整個過程只要依照畫面的指示設定,都可以安裝成功。其中可能比較困難在於硬碟空間的分配,這對於許多新手來說也是一個難點,也是這篇所要說的重點。
Thumbnail
在先前的文章中說明了Linux大致上的安裝流程,整個過程只要依照畫面的指示設定,都可以安裝成功。其中可能比較困難在於硬碟空間的分配,這對於許多新手來說也是一個難點,也是這篇所要說的重點。
Thumbnail
路徑處理 basename(string [.string]):回傳第一個參數路徑字串的檔案名稱,包含副檔案,如果有第二個參數字串,就會在檔案名稱刪除此字串,例如:刪除副檔名".php"。 dirname(string):回傳參數路徑字串中的路徑。 realpath(string):回傳參數路
Thumbnail
路徑處理 basename(string [.string]):回傳第一個參數路徑字串的檔案名稱,包含副檔案,如果有第二個參數字串,就會在檔案名稱刪除此字串,例如:刪除副檔名".php"。 dirname(string):回傳參數路徑字串中的路徑。 realpath(string):回傳參數路
Thumbnail
Linux的軟體安裝流程大致上與其他系統並沒有太大的區別,僅此在於安裝的方式會比較多元。但也因為這樣,常會讓新手感到很混亂,不知道要下手。所以本篇就來說說如何在Linux上安裝軟體。
Thumbnail
Linux的軟體安裝流程大致上與其他系統並沒有太大的區別,僅此在於安裝的方式會比較多元。但也因為這樣,常會讓新手感到很混亂,不知道要下手。所以本篇就來說說如何在Linux上安裝軟體。
Thumbnail
接續上一篇文章,本文再深入一點關於ETCD基本操作以及在其他文章中關於ETCD節點資料不一致情況的除錯內容分享
Thumbnail
接續上一篇文章,本文再深入一點關於ETCD基本操作以及在其他文章中關於ETCD節點資料不一致情況的除錯內容分享
Thumbnail
我們偶爾在Linux的Bash腳本都會看到「pushd …」、「popd」的影子, 一開始看到也覺得這是什麼碗粿…, 這樣很難讀耶, 但指令被發明出來一定是有它存在的意義與道理的, 我們不能因為未知就直覺的認為該指令毫無作用, 而是要在正確的情境之下去使用。 pushd與popd我們就理解
Thumbnail
我們偶爾在Linux的Bash腳本都會看到「pushd …」、「popd」的影子, 一開始看到也覺得這是什麼碗粿…, 這樣很難讀耶, 但指令被發明出來一定是有它存在的意義與道理的, 我們不能因為未知就直覺的認為該指令毫無作用, 而是要在正確的情境之下去使用。 pushd與popd我們就理解
Thumbnail
👨‍💻 簡介 今天快速介紹一下對檔案的操作所使用的package os,包括檔案和資料夾操作等。 檔案和資料夾操作 os package 可以執行各種檔案和資料夾操作,如建立、讀取、寫入、刪除檔案,以及取得資料夾內容等。
Thumbnail
👨‍💻 簡介 今天快速介紹一下對檔案的操作所使用的package os,包括檔案和資料夾操作等。 檔案和資料夾操作 os package 可以執行各種檔案和資料夾操作,如建立、讀取、寫入、刪除檔案,以及取得資料夾內容等。
Thumbnail
本文教你如何運用終端機指令來操作你的電腦,包括Mac和Windows用法。包括指令如pwd, ls, cd, mkdir, touch, rm, rmdir, cp, mv。另外,還附有相關的影片教學和額外資源教學。
Thumbnail
本文教你如何運用終端機指令來操作你的電腦,包括Mac和Windows用法。包括指令如pwd, ls, cd, mkdir, touch, rm, rmdir, cp, mv。另外,還附有相關的影片教學和額外資源教學。
Thumbnail
sed 指令 ( 取代 , 截取行 ) 删除文件第一行: sed -i ‘1d’ filename 删除文件最后一行: sed -i ‘$d’ fileName 刪除首行空白 sed ‘s/^[ \t]*//g’ 參考 : https://codertw.com/前端開發/393321/ 在檔案最後
Thumbnail
sed 指令 ( 取代 , 截取行 ) 删除文件第一行: sed -i ‘1d’ filename 删除文件最后一行: sed -i ‘$d’ fileName 刪除首行空白 sed ‘s/^[ \t]*//g’ 參考 : https://codertw.com/前端開發/393321/ 在檔案最後
Thumbnail
Linux FAQ : 查看 jar 檔方式 jar 檔其實類似 zip 壓縮檔 除了可以用 zip 軟體來打開 在 Linux 可以用一些指令輔助
Thumbnail
Linux FAQ : 查看 jar 檔方式 jar 檔其實類似 zip 壓縮檔 除了可以用 zip 軟體來打開 在 Linux 可以用一些指令輔助
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News