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
変えるは、コロンで区切られた文字列と自動的に同期される配列ですPATH
。print -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[^:]*"