xargsの結果{}を$(cmd {})に入れる方法は? [閉鎖]

xargsの結果{}を$(cmd {})に入れる方法は? [閉鎖]

たとえば、 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でなければなりません。

関連情報