我想将 Unix 权限位从八进制转换为符号模式,反之亦然。例如。:
$ mode-encode 'ugo+rwx'
0000
$ mode-decode 0000
ugo+rwx
我知道有在线权限位计算器并chmod
支持以两种方式传递位,但我想要一个可以与不支持符号模式的命令一起使用的 bash 代码片段。
编辑:我想获得权限位,而不是 umask!
答案1
在任何 POSIX shell 中,您可以调用:
savmask=$(umask)
umask someval
umask -S # outputs the symbolic form
umask # outputs the octal form
umask -- "$savmask"
你可以把它放入一个函数中
printmask() {
savmask=$(umask) || return
umask -- "$1" || return
umask -S
umask
umask -- "$savmask"
}
或者使用子 shell 来避免保存和恢复 umask:
printmask() (
umask -- "${1?Please specify a umask}" || exit
umask -S
umask
)