GNU coreutils命令readlink -f
的等效Perl命令是什么?
如果文件名的任何组件(最后一个组件除外)丢失或不可用,则readlink不会生成 输出并以非零退出代码退出。尾随斜线是 忽略。
答案 0 :(得分:8)
您可以使用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:
答案 1 :(得分:0)
作为Perl的新秀,我很高兴地说我自己已经找到了这个STDIN解决方案(经过多次尝试,请记住Perl的学习曲线已知很陡)。
毫无疑问,devnull的解决方案很棒,但根据我的口味,它有点过于“潦草” - 而我有时只想管道 perl one-liner到echo
' ed字符串,像这样:
echo "/home/user/somesymlinkedpath" | perl -MCwd=abs_path -nle 'print abs_path $_'
因为周围可能有更多人想知道如何编码这种管道形式(让perl
从STDIN读取参数),我决定也在这里发布。