当我进入终端时
files=(/var/db/*); printf '%s\n' "${files[@]}"
并运行它,我得到该文件夹中的文件列表,但进入受限制的TokenCache目录并没有提供任何内容:
files=(/var/db/TokenCache/*); printf '%s\n' "${files[@]}"
此命令返回/ var / db / TokenCache / *而不是文件/文件夹。有没有办法让它在受限制的文件夹中工作,因为 sudo ls 甚至 sudo rm 在里面工作?例如:
sudo ls -la /var/db/TokenCache
显示其内容,即两个文件夹配置和令牌。
答案 0 :(得分:0)
答案可能是这样的:
files=($(sudo ls "/var/db/TokenCache"))
printf '%s\n' "${files[@]}"
但这只是在假设的情况下才安全,指定的文件夹(在本例中为TokenCache)只包含名称中没有任何空格的元素。
如果你想从每个文件的数组中获取完整路径,我建议这样:
directory="/var/db/TokenCache"
files=($(sudo ls "${directory}"))
printf "${directory}/%s\n" "${files[@]}"
请注意,'在printf
调用的格式说明符中更改为“。这需要shell进行变量扩展。
答案 1 :(得分:0)
全局扩展发生在shell中,因此您需要一个以具有正确权限的用户身份运行的shell实例。
sudo bash -c 'files=(/var/db/*); printf "%s\n" "${files[@]}"'