PATHからすべてのbinディレクトリを一度に抽出する方法は?

PATHからすべてのbinディレクトリを一度に抽出する方法は?

binすべてのディレクトリを抽出PATHして変数に設定したいと思います。すべてのディレクトリが1行に表示されるので混乱しています。:しかし、私はこの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

どうすればいいですか?

答え1

なぜあなたはこのディレクトリを特別に扱いたいのかわかりませんbin。おそらく各ディレクトリを1行に表示したいと思います。その場合は、次のようにできます。

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

答え2

別の方法は、シェルに分割を実行するように要求することです$PATH

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

grep必要に応じてそれを後処理できます。

答え3

zshを使用しているとします。

print -lr $path

これpath変えるは、コロンで区切られた文字列と自動的に同期される配列ですPATHprint -lrバックスラッシュを解釈せずに1行に1つの要素を印刷します1。

バインドされた配列なしでコロンで区切られた別のリストが必要な場合は、以下を渡すことができます。パラメータ拡張フラグ

print -lr ${(s[:])LD_LIBRARY_PATH}

「binディレクトリ」が何を意味するのかわかりません。 grepを使用してフィルタリングできます。

print -lr $path | grep bin

または使用パラメータ拡張次の機能

print -lr ${(M)path:#*bin*}

1 nitpickersの場合:リストが空ではなく、最初の要素がで始まらないとします-。それは安全な賭けです$path

答え4

解決策が見つかりました

echo "$PATH" | grep -o "[^:]*bin[^:]*"

関連情報