Path

如何在單行中從 PATH 中提取所有 bin 目錄?

  • December 9, 2021

我想從中提取所有bin目錄PATH並將其設置為變數。我很困惑,因為所有目錄都出現在一行中,:但我只想要這些目錄bin

/home/jo52900/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/opt/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin:/local/bin:/opt/universal/ucmdmgr/bin

我該怎麼做?

我不知道您為什麼要bin特別對待目錄,我猜您只是想在自己的行上查看每個目錄。如果是這樣,你可以這樣做:

printf '%s\n' "$PATH" | tr : '\n'

例如,在我的系統上,我有許多$PATH名稱不包含的目錄bin,這給出:

$ printf '%s\n' "$PATH" | tr : '\n' 
/home/terdon/perl5/bin
/home/terdon/Setups/cd-hit-v4.5.4-2011-03-07
/sbin
/usr/local/sbin
/usr/bin
/usr/sbin
/home/terdon/Setups/PfamScan
/home/terdon/research/data/python
/home/terdon/scripts
/home/terdon/bin

如果您真的只想查看bin目錄,可以提取它們:

$ printf '%s\n' "$PATH" | tr : '\n' | grep '/bin$'
/home/terdon/saphetor/bin
/home/terdon/perl5/bin
/usr/bin
/home/terdon/bin

或者,如果您想做您在答案中顯示的內容,並且還包括bin在其名稱中的任何位置包含字元串的任何目錄,而不僅僅是那些實際命名 bin的目錄,您可以執行以下操作:

$ printf '%s\n' "$PATH" | tr : '\n' | grep 'bin'
/home/terdon/saphetor/bin
/home/terdon/perl5/bin
/sbin
/usr/local/sbin
/usr/bin
/usr/sbin
/home/terdon/bin

另一種方法是要求外殼拆分$PATH

( IFS=: ; printf "%s\n" $PATH )

您可以根據需要對其進行後期處理grep

引用自:https://unix.stackexchange.com/questions/680816