Esta é a aparência da saída de ldd /bin/ls
:
linux-vdso.so.1 (0x00007fff2cffe000)
libcap.so.2 => /usr/lib/libcap.so.2 (0x00007f87e978f000)
libacl.so.1 => /usr/lib/libacl.so.1 (0x00007f87e9586000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f87e91d9000)
libattr.so.1 => /usr/lib/libattr.so.1 (0x00007f87e8fd4000)
/lib64/ld-linux-x86-64.so.2 (0x00007f87e9993000)
Esta é a aparência da saída de ldd /bin/ls /bin/cat
:
/bin/ls:
linux-vdso.so.1 (0x00007fffd25df000)
libcap.so.2 => /usr/lib/libcap.so.2 (0x00007f28f8d09000)
libacl.so.1 => /usr/lib/libacl.so.1 (0x00007f28f8b00000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f28f8753000)
libattr.so.1 => /usr/lib/libattr.so.1 (0x00007f28f854e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f28f8f0d000)
/bin/cat:
linux-vdso.so.1 (0x00007ffff9dfe000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007fc44208a000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc442437000)
Tente isso:
ldd "$@" | cut -d' ' -f3 | sort -u | grep -v ':$' |
while read i
do
cp --parents "$i" "$CHROOT"
done
Acima, usamos grep
para remover as linhas /bin/ls:
e /bin/cat:
. O código%
é uma expressão regular que corresponde a dois pontos nas extremidades das linhas.
Note que fiz algumas outras alterações no seu script. O estilo piping-loop
é um pouco mais idiomático. :$
geralmente tem uma opção sort
para remover duplicatas.
Geralmente, é preferível usar -u
em vez de "$@"
, pois isso se expandirá para
nomes de arquivos com espaços e caracteres especiais corretamente. Não deveria importar em
neste caso, no entanto.
Para copiar os comandos e suas bibliotecas, adicione uma segunda chamada a $*
abaixo
o loop.
ldd "$@" | cut -d' ' -f3 | sort -u | grep -v ':$' |
while read i
do
cp --parents "$i" "$CHROOT"
done
cp --parents "$@" "$CHROOT"