例如:
find /usr/lib -maxdepth 1 -type l -iname "*libblas*"|xargs -I{} echo "{} =>" $(realpath {})
我希望它输出:
/usr/lib/libblas.so.3gf=>/usr/lib/libblas/libblas.so.3gf.0
/usr/lib/libblas.so=>/usr/lib/libblas/libblas.so.3gf.0
/usr/lib/libblas.a=>/usr/lib/libblas/libblas.a
这将不起作用,因为 in 的值$()
在脚本实际运行之前已扩展。
有什么方法可以达到这个结果吗? bash 中没有循环?
答案1
你可以试试这个方法
find /usr/lib -maxdepth 1 -type l -iname "*lib*" -print \
| xargs -P1 -I{} -- sh -c 'echo -n " {} => " && realpath "{}"'
答案2
find /usr/lib -maxdepth 1 -type l -iname "*libblas*"|xargs -I{} sh -c 'echo "{} =>" $(realpath {})'
基本上你必须启动一个子shell。 FWIW我不知道什么是真实路径;如果它是别名或函数,您的子 shell 可能需要是 bash。