39 bash command-line
我想要一种简单的方法来获取文件的完整路径。我目前输入这个:
echo `pwd`/file.ext
Run Code Online (Sandbox Code Playgroud)
为了缩短它,我做了一个 bash 别名:
alias fp='echo `pwd`/'
Run Code Online (Sandbox Code Playgroud)
但是现在如果我输入fp file.ext,在/和之间会出现一个空格file.ext。
这样的命令是否已经存在,而我错过了它?如果没有,我将如何在 bash 中创建这样的别名或函数?
Dou*_*ris 54
在 linux 系统上,您应该readlink从 GNU coreutils 项目安装并且可以执行以下操作:
readlink -f file.ext
Run Code Online (Sandbox Code Playgroud)
Debian/ubuntu 系统可能安装了realpath实用程序,它“提供/bin/readlink -f与 coreutils 包中的功能大致相同”。
代替pwd命令,使用PWD变量(它也在 POSIX 中):
fp () {
case "$1" in
/*) printf '%s\n' "$1";;
*) printf '%s\n' "$PWD/$1";;
esac
}
Run Code Online (Sandbox Code Playgroud)
如果您需要支持 Windows,则识别绝对路径会更加复杂,因为 unix 工具的每个端口都有自己的转换文件路径的规则。对于 Cygwin,使用该cygpath实用程序。
小智 6
这是我唯一可以接受的方式。不扩展像 realpath 和 readlink 这样的链接,是我见过的经典方法。
#! /bin/sh
echo "$(cd "$(dirname "$1")"; pwd -P)/$(basename "$1")"
Run Code Online (Sandbox Code Playgroud)