Linux 命令列工具使用小貼士及技巧(三)

2021-09-23 16:17:14 字數 4591 閱讀 1735

在這個系列的第一部分,我們詳細地討論了cd -命令,在第二部分,我們深入**了pushdpopd兩個命令,以及它們使用的場景。

繼續對命令列的討論,在這篇教程中,我們將會通過簡單易懂的例項來討論cdpath這個環境變數。我們也會討論關於此變數的一些高階細節。

在這之前,先宣告一下此教程中的所有例項都已經在 ubuntu 14.04 和 4.3.11(1) 版本的 bash 下測試過。

即使你的命令列所有操作都在特定的目錄下 - 例如你的主目錄,然而在你切換目錄時也不得不提供絕對路徑。比如,考慮我現在的情況,就是在/home/himanshu/downloads目錄下:

$ 

pwd

/

home

/himanshu

/downloads

現在要求切換至/home/himanshu/desktop目錄,我一般會這樣做:

cd

/home

/himanshu

/desktop

/

或者

cd

~/desktop/

或者

cd

../desktop

/

能不能只是執行以下命令就能簡單地實現呢:

cd

desktop

是的,這完全有可能。這就是環境變數cdpath出現的時候了。你可使用這個變數來為cd命令定義基礎目錄。

如果你嘗試列印它的值,你會看見這個環境變數預設是空值的:

$ 

echo

$cdpath

現在 ,考慮到上面提到的場景,我們使用這個環境變數,將/home/himanshu作為cd命令的基礎目錄來使用。

最簡單的做法這樣:

export

cdpath

=/home/

himanshu

現在,我能做到之前所不能做到的事了 - 當前工作目錄在/home/himanshu/downloads目錄裡時,成功地執行了cd desktop命令。

$ 

pwd

/

home

/himanshu

/downloads

$

cddesktop

/

/home/

himanshu

/desktop

$

這表明了我可以使用cd命令來到達/home/himanshu下的任意乙個目錄,而不需要在cd命令中顯式地指定/home/himanshu或者~,又或者是../(或者多個../)。

現在你應該知道了怎樣利用環境變數cdpath/home/himanshu/downloads/home/himanshu/desktop之間輕鬆切換。現在,考慮以下這種情況, 在/home/himanshu/desktop目錄裡包含乙個名字叫做downloads的子目錄,這是將要切換到的目錄。

但突然你會意識到cd downloads會切換到/home/himanshu/downloads。所以,為了確保這不會發生,你可以這樣做:

cd

./downloads

雖然上述命令本身沒有問題,但你還是需要耗費點額外的精力(雖然很小),尤其是每次這種情況發生時你都不得不這樣做。所以,有乙個更加優雅的解決方案來處理,就是以如下方式來設定cdpath環境變數。

export

cdpath

=".:/home/himanshu"

它的意思是告訴cd命令先在當前的工作目錄查詢該目錄,然後再嘗試搜尋/home/himanshu目錄。當然,cd命令是否以這樣的方式執行,完全取決於你的偏好和要求 - 討論這一點的目的是為了讓你知道這種情況可能會發生。

就如你現在所知道的,一旦環境變數cdpath被設定,它的值 - 或者它所包含的路徑集合 - 就是系統中cd命令搜尋目錄的地方 ( 當然除了使用絕對路徑的場景 )。所以,完全取決於你來確保該命令行為的一致性。

繼續說,如果乙個 bash 指令碼以相對路徑使用cd命令,最好還是先清除或者重置環境變數cdpath,除非你覺得遇上不可**的麻煩也無所謂。還有乙個可選的方法,比起在終端使用export命令來設定cdpath,你可以在測試完當前的 shell 是互動式還是非互動式之後,再在你的.bashrc檔案裡設定環境變數,這樣可以確保你對環境變數的改動只對互動式 shell 生效。

環境變數中,路徑出現的順序同樣也是很重要。舉個例子,如果當前目錄是在/home/himanshu目錄之前列出來,cd命令就會先搜尋當前的工作目錄然後才會搜尋/home/himanshu目錄。然而,如果該值為/home/himanshu:.,搜尋就首先從/home/himanshu開始,然後到當前目錄。不用說,這會影響cd命令的行為,並且不注意路徑的順序可能會導致一些麻煩。

要牢記在心的是,環境變數cdpath,就像其名字表達的,只對cd命令有作用。意味著在/home/himanshu/downloads目錄裡面時,你能執行cd desktop命令來切換到/home/himanshu/desktop目錄,但你不能使用ls。以下是乙個例子:

$ 

pwd

/

home

/himanshu

/downloads

$

lsdesktop

ls

:cannot access

desktop:no

such

file

ordirectory

$

然而,這還是有簡單的變通處理的。例如,我們可以用以下不怎麼費力的方式來達到目的:

$ 

cddesktop

/;ls

/

home

/himanshu

/desktop

backup backup

~downloads

gdb.

html outline

~outline

.txt outline

.txt

~

不過,不是每種情況就能變通處理的。

另乙個重點是:就像你可能已經觀察到的,每次你使用cdpath環境變數集來執行cd命令時,該命令都會在輸出裡顯示你切換到的目錄的完整路徑。不用說,不是所有人都想在每次執行cd命令時看到這些資訊。

為了確保該輸出被制止,你可以使用以下命令:

aliascd=

'>/dev/null cd'

如果cd命令執行成功,上述命令不會輸出任何東西,如果失敗,則允許產生錯誤資訊。

最後,假如你遇到設定cdpath環境變數後,不能使用 shell 的 tab 自動補全功能的問題,可以嘗試安裝並啟用 bash 自動補全(bash-completion)。更多請參考 這裡。

cdpath環境變數時一把雙刃劍,如果沒有掌握完善的知識和隨意使用,可能會令你陷入困境,並花費你大量寶貴時間去解決問題。當然,這不代表你不應該去試一下;只需要了解一下所有的可用選項,如果你得出結論,使用cdpath會帶來很大的幫助,就繼續使用它吧。

原文發布時間為:2017-04-08

Linux 命令列工具使用小貼士及技巧(二)

在本系列的第一部分中,我們通過討論cd 命令的用法,重點介紹了 linux 中的命令列導航。還討論了一些其他相關要點 概念。現在進一步討論,在本文中,我們將討論如何使用pushd和popd命令在 linux 命令列上獲得更快的導航體驗。在我們開始之前,值得說明的一點是,此後提到的所有指導和命令已經在...

命令列工具的使用

mac上命令列開啟 ctrl 空格 搜尋terminal 開啟終端 windows命令列工具 powershell window7開始選單搜尋powershell windows8 用快捷鍵win q 或者滑鼠移動到桌面角落去搜尋powershell 可以右鍵選擇以管理員的身份執行powershel...

命令列工具的使用

啟動ros master roscore 啟動小海龜 器rosrun turtlesim turtlesim node 啟動海龜控制節點rosrun turtlesim turtle teleop key turtle1 cmd vel為給海龜發布指令的話題 那麼,通過指令給這個話題發布資料,讓海龜...