(IFS=:; for p in $PATH; do [ -w "$p" ] && printf '%s\n' "$p"; done)
Isso ignorará entradas vazias (que representam o diretório atual ) e fornecerá resultados incorretos para entradas contendo caracteres globbing (como apontado pelo tio Billy). Para lidar com ambos, use
sh -fc 'IFS=:; for p in $PATH""; do [ -w "${p:-.}" ] && printf "%s\n" "$p"; done'
Armazenará no writable_path_componentsarray os $PATHcomponentes que são diretórios (determinados após a resolução do link simbólico) e graváveis pelo usuário atual.
Elementos vazios são descartados. Ter elementos vazios ou qualquer caminho relativo para o que importa $PATHé fortemente desencorajado.
Se $PATHcontiver caminhos relativos, isso significa que, embora alguns deles possam ser graváveis agora, eles podem não ser mais uma vez que você cd em outro lugar.
Para higienizar $PATHe remover todos os caminhos relativos, bem como duplicatas, você pode fazer:
typeset -U path=( ${(M)path:#/*} )
Definir o Uatributo em $path(que aqui permanece vinculado a $PATH), significa $PATHque os elementos permanecerão únicos.
Divida
$PATH
em dois pontos, alterandoIFS
para dividir campos em dois pontos durante a expansão de palavras e verifique se você pode gravar em cada componente com o-w
teste :Isso ignorará entradas vazias (que representam o diretório atual ) e fornecerá resultados incorretos para entradas contendo caracteres globbing (como apontado pelo tio Billy). Para lidar com ambos, use
Com
zsh
(onde$PATH
está vinculado ao$path
array):Armazenará no
writable_path_components
array os$PATH
componentes que são diretórios (determinados após a resolução do link simbólico) e graváveis pelo usuário atual.Elementos vazios são descartados. Ter elementos vazios ou qualquer caminho relativo para o que importa
$PATH
é fortemente desencorajado.Se
$PATH
contiver caminhos relativos, isso significa que, embora alguns deles possam ser graváveis agora, eles podem não ser mais uma vez que você cd em outro lugar.Para higienizar
$PATH
e remover todos os caminhos relativos, bem como duplicatas, você pode fazer:Definir o
U
atributo em$path
(que aqui permanece vinculado a$PATH
), significa$PATH
que os elementos permanecerão únicos.É assim que você pode fazer isso em
xonsh
retorna uma lista de caminhos que são graváveis.