列出当前用户有权写入的 PATH 目录?

列出当前用户有权写入的 PATH 目录?

我可以PATH仅从我(当前用户)有权写入的目录中提取内容吗?

我可以想象我需要类似的东西,echo $PATH | grep...但我不知道是什么。

答案1

以冒号分隔$PATH,更改IFS在冒号上分割字段期间单词扩展,并检查是否可以使用以下命令写入每个组件考试-w

(IFS=:; for p in $PATH; do [ -w "$p" ] && printf '%s\n' "$p"; done)

这将忽略空条目(代表当前目录)并且对于包含通配符的条目会给出错误的结果(正如比利叔叔所指出的)。要处理两者,请使用

sh -fc 'IFS=:; for p in $PATH""; do [ -w "${p:-.}" ] && printf "%s\n" "$p"; done'

答案2

With 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)]

返回可写路径的列表。

相关内容