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)]
쓰기 가능한 경로 목록을 반환합니다.