与 GNU coreutils 命令等效的 Perl 命令是readlink -f
什么?
如果文件名的任何组成部分(最后一个除外)丢失或不可用,则 readlink 不产生任何输出并以非零退出代码退出。尾部斜杠被忽略。
与 GNU coreutils 命令等效的 Perl 命令是readlink -f
什么?
如果文件名的任何组成部分(最后一个除外)丢失或不可用,则 readlink 不产生任何输出并以非零退出代码退出。尾部斜杠被忽略。
您可以使用Cwd:
use Cwd 'abs_path';
my $path = "/some/arbitrary/path";
print abs_path($path);
测试:
for q in exists imaginary imarginary/imaginary ; do
echo "$q"
echo -n "readlink -f: " ; readlink -f "$q"
echo -n "abs_path: " ; perl -MCwd=abs_path -E'say abs_path $ARGV[0]' "$q"
echo
done
输出:
exists
readlink -f: /home/eric/exists
abs_path: /home/eric/exists
imaginary
readlink -f: /home/eric/imaginary
abs_path: /home/eric/imaginary
imaginary/imaginary
readlink -f: abs_path:
作为一个 Perl 新手,我很高兴地说我自己已经想出了这个 STDIN 解决方案(经过多次尝试,请记住 Perl 的学习曲线是众所周知的陡峭)。毫无疑问, devnull的解决方案很棒,但它对我的口味来说有点太“脚本化”了——而我有时只想将perl 单行线传递给echo
'ed 字符串,如下所示:
echo "/home/user/somesymlinkedpath" | perl -MCwd=abs_path -nle 'print abs_path $_'
因此,可能有更多的人想知道如何编写这种管道形式的代码(perl
从 STDIN 读取参数),我决定也将其发布在这里。