use*_*849 27 scripting permissions shell-script files
在 shell 脚本中,如何在不实际尝试修改文件的情况下轻松且非侵入性地测试对文件的写访问权限?
我可以解析 的输出stat
,但这看起来非常复杂,而且可能很脆弱,尽管我不确定不同实现和时间的 stat 输出有多少不同。
我可以附加到文件的末尾,看看是否成功,但这有潜在危险,我能想到的两个原因是:
cha*_*aos 32
只需使用实用程序的 -w
标志test
:
[ -w /path/to/file ] && echo "writeable" || echo "write permission denied"
Run Code Online (Sandbox Code Playgroud)
请注意,如果您稍后要写入该文件,则仍有可能无法写入该文件。文件可能已移动,权限可能已更改等。也可能发生-w
检测写入权限但某些其他因素干预使文件不可写的情况。
G-M*_*ca' 11
另一种方法:
if >> /path/to/file
then
echo "writeable"
else
echo "write permission denied"
fi
Run Code Online (Sandbox Code Playgroud)
这将尝试打开文件进行追加,如果成功, 则不运行任何命令(即,运行空命令)并将输出输出到文件。
请注意,如果它不存在,这将创建一个空文件。
命令的-w
操作员test
可能只是执行 astat
然后尝试确定您是否应该具有访问权限。我的替代方案(以上)test
在某些特殊情况下比该方法更可靠,因为它强制访问检查由内核而不是外壳程序完成。例如,
stat
可能会返回一个具有误导性的模式值。