我可以使用外部命令realpath
来获取文件的绝对路径:
realpath tmp/toto
退货
/home/john/tmp/toto
我可以使用bash
内置的来获得相同的效果吗?
Bash带有realpath
可加载的扩展程序。由于bash-4.4应该默认安装,¹,因此您应该能够执行以下操作:
BASH_LOADABLES_PATH=${BASH_LOADABLES_PATH:-/usr/local/lib/bash:/usr/lib/bash}
enable -f realpath realpath
realpath ..
help realpath
一旦启用,每个可加载命令将成为“真正的”内置命令,而不会产生额外的fork / exec开销,并且能够操纵bash环境(如提供,例如mypid
可加载)。
该-f
选项指定可加载扩展二进制文件的路径,如果它不在预期的位置,或者您的发行版未正确设置它,则需要将变量设置为BASH_LOADABLES_PATH
包含扩展名的目录(或-f
与指向扩展名的完整路径一起使用)。可加载)。如果设置正确,则不需要上面的第一行。
当编写更喜欢但不需要此类扩展的可移植脚本时,无论如何我都将使用包装器函数(类似于@Kusalananda的函数),以便它可以回退到外部(例如从coreutilsreadlink
或realpath
从中)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句