![xargsの結果{}を$(cmd {})に入れる方法は? [閉鎖]](https://linux33.com/image/39846/xargs%E3%81%AE%E7%B5%90%E6%9E%9C%7B%7D%E3%82%92%24%EF%BC%88cmd%20%7B%7D%EF%BC%89%E3%81%AB%E5%85%A5%E3%82%8C%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
たとえば、
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 {})'
デフォルトではサブシェルを起動する必要があります。 FWIWの実際のパスが何であるかわかりません。エイリアスまたは関数の場合、サブシェルはおそらくbashでなければなりません。