PATH
私(現在のユーザー)に書き込み権限があるディレクトリからのみコンテンツを抽出できますか?
似たようなことが必要だと想像できますが、echo $PATH | grep...
何なのかわかりません。
答え1
コロンで区切って次に$PATH
変更します。IFS
コロンでフィールドを分割期間単語拡張、以下を使用して各コンポーネントに書き込むことができることを確認します。-w
テスト:
(IFS=:; for p in $PATH; do [ -w "$p" ] && printf '%s\n' "$p"; done)
これは空の項目を無視します(現在のディレクトリ)ワイルドカードを含むアイテムには間違った結果が得られます(Billyおじさんが指摘したように)。両方を処理するには、次を使用します。
sh -fc 'IFS=:; for p in $PATH""; do [ -w "${p:-.}" ] && printf "%s\n" "$p"; done'
答え2
zsh
(配列に関連する$PATH
)$path
:
writable_path_components=( $^path(N-/e['[[ -w $REPLY ]]']) )
writable_path_components
$PATH
現在ユーザーが書き込むことができるディレクトリコンポーネント(シンボリックリンクの確認後に決定されます)は配列に保存されます。
空の要素は削除されます。$PATH
空の要素や重要な相対パスを使用しないことをお勧めします。
相対パスを含めると、$PATH
そのうちのいくつかは今書くことができますが、他の場所でCDを使用するとそれ以上書くことができないことを意味します。
$PATH
すべての相対パスと重複エントリをクリーンアップして削除するには、次の手順を実行できます。
typeset -U path=( ${(M)path:#/*} )
プロパティをU
on $path
(ここではまだ関連しています$PATH
)に設定すると、$PATH
その要素は一意に保たれます。
答え3
これがあなたができることですxonsh
import os;[p for p in $PATH if os.access(p, os.W_OK)]
書き込み可能なパスのリストを返します。