七個意想不到的 Bash 變數

繼續一系列筆記 鮮為人知的 功能 bash,我將向您展示七個您可能不知道的變數。

1) PROMPT_COMMAND

您可能已經知道如何操作提示符來顯示各種有用的信息,但並不是每個人都知道您可以在每次顯示提示符時運行 shell 命令。

事實上,許多複雜的提示操縱器使用此變數來執行命令來收集提示中顯示的資訊。

嘗試在新的 shell 中運行它,看看會話會發生什麼:

$ PROMPT_COMMAND='echo -n "writing the prompt at " && date'

2) HISTTIMEFORMAT

如果運行 history 在控制台中,您將收到先前在您的帳戶下執行的命令清單。

$ HISTTIMEFORMAT='I ran this at: %d/%m/%y %T '

設定此變數後,新條目會記錄時間和命令,因此輸出將如下所示:

第1871章 我在以下位置運行: 01/05/19 13:38:07 cat /etc/resolv.conf 第1872章 我在以下位置運行: 01/05/19 13:38:19curl bbc.co.uk第1873章 我在以下位置運行: : 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 我在以下位置運行: 01/05/19 13:39:18 curl -vvv bbc. co.uk 1876 我在以下位置運行: 01 /05/19 13:39:25 sudo su -

格式匹配來自的字符 man date.

3) CDPATH

為了節省命令列時間,您可以使用此變數像發出命令一樣輕鬆地更改目錄。

PATH, 多變的 CDPATH 是以冒號分隔的路徑清單。 當您運行命令時 cd 使用相對路徑(即沒有前導斜線),預設 shell 在本機資料夾中尋找符合的名稱。 CDPATH 將在您提供的路徑中搜尋您想要存取的目錄。

如果你安裝 CDPATH 這樣:

$ CDPATH=/:/lib

然後輸入:

$ cd /home
$ cd tmp

那麼你總是會陷入 /tmp 不管你在哪裡。

但是,請小心,因為如果您沒有在清單中指定本地的(.) 資料夾,那麼您將無法建立任何其他資料夾 tmp 並像往常一樣去它:

$ cd /home
$ mkdir tmp
$ cd tmp
$ pwd
/tmp

哎呀!

這類似於當我意識到本地資料夾沒有包含在更熟悉的變數中時所感到的困惑 PATH....但是您必須在 PATH 變數中執行此操作,因為您可能會被欺騙從某些下載的程式碼中執行虛假命令。

我的是由起點設定的:

CDPATH=.:/space:/etc:/var/lib:/usr/share:/opt

4) SHLVL

你有沒有想過,打字 exit 它會將您從目前的 bash shell 帶到另一個「父」shell,還是會完全關閉控制台視窗?

該變數追蹤您在 bash shell 中的嵌套深度。 如果您建立一個新終端,則將其設為 1:

$ echo $SHLVL
1

然後,如果啟動另一個 shell 進程,數字會增加:

$ bash
$ echo $SHLVL
2

這在您不確定是否退出或追蹤嵌套位置的腳本中非常有用。

5) LINENO

該變數對於分析當前狀態和調試也很有用 LINENO,報告迄今為止在會話中執行的命令數:

$ bash
$ echo $LINENO
1
$ echo $LINENO
2

這在偵錯腳本時最常使用。 插入像這樣的行 echo DEBUG:$LINENO,您可以快速確定您位於(或不在)腳本中的位置。

6) REPLY

如果你像我一樣通常會寫這樣的程式碼:

$ read input
echo do something with $input

令人驚訝的是您根本不需要擔心創建變數:

$ read
echo do something with $REPLY

這做同樣的事情。

7) TMOUT

為了避免出於安全原因在生產伺服器上停留太長時間或意外地在錯誤的終端中運行危險的東西,設定此變數可以起到保護作用。

如果在設定的秒數內沒有輸入任何內容,shell 就會退出。

也就是說,這是一個替代方案 sleep 1 && exit:

$ TMOUT=1

來源: www.habr.com

添加評論