我想要一种简单的方法来获取文件的完整路径。我目前输入:
echo `pwd`/file.ext
为了缩短它,我做了一个bash别名:
alias fp='echo `pwd`/'
但是现在如果我输入的话fp file.ext
,在/
和之间会出现一个空格file.ext
。
这样的命令是否已经存在,而我却错过了?如果没有,我将如何在bash中创建这样的别名或函数?
我想要一种简单的方法来获取文件的完整路径。我目前输入:
echo `pwd`/file.ext
为了缩短它,我做了一个bash别名:
alias fp='echo `pwd`/'
但是现在如果我输入的话fp file.ext
,在/
和之间会出现一个空格file.ext
。
这样的命令是否已经存在,而我却错过了?如果没有,我将如何在bash中创建这样的别名或函数?
Answers:
在linux系统上,您应该已经readlink
从GNU coreutils项目安装了该文件,并且可以执行以下操作:
readlink -f file.ext
Debian / ubuntu系统可能安装了realpath实用程序,它“提供的功能/bin/readlink -f
与coreutils软件包中的功能大致相同”。
用您现在使用的内容回答您的问题:
别名会在您现在输入的位置扩展。您输入:
% fp<SPACE>file.ext
这变成
% echo `pwd`<SPACE>file.exe
您可以使用函数来避免这种情况:
function fp() {
echo `pwd`/"$1"
}
您可以照常使用:
% fp file.ext
echo "`pwd`/$1"
*
在包含其他文件的目录中的文件中调用函数)。
fp *
产率/tmp/4cc3ea0c1b34b
,因为这就是该函数的第一paramete。其他参数将是目录中的其他文件。一旦我有了一个名为' '的文件,该功能仍会按预期运行,并用“ *”或*或*进行调用
您可以使用:
realpath file.ext
apt-cache search realpath
以显示coreutils和普通ol'realpath软件包都包含它。然后,您可以输入sudo apt-get install realpath
(或coreutils
)进行安装。
从/programming//a/3915420/5795941
这是我唯一可以接受的方法。不扩展诸如realpath和readlink之类的链接,这是我所见过的经典方式。
#! /bin/sh
echo "$(cd "$(dirname "$1")"; pwd -P)/$(basename "$1")"
readlink -f
(或realpath
,它是为保持兼容性而保留的较早的实用程序)将另外扩展所有符号链接,这不一定是所希望的。