PDA

Visualizza la versione completa : Pipeling tra comandi


carlo2002
16-02-2013, 16:12
Sto studiando un po' pi a fondo GNU/Linux e stavo provando alcune cose da terminale.

Con which ls ottengo il pathname assoluto del comando ls , ossia /bin/ls.

Con ldd /bin/ls ottengo le librerie condivise di cui ha bisogno il comando ls.

Volevo provare a concatenare i due comandi pensando di fare which ls | ldd ma la cosa non funziona ed ottengo un errore.

Cos' che sbaglio?

MItaly
16-02-2013, 16:32
La pipe redirige lo standard output del primo comando sullo standard input del secondo, ma ldd legge il file su cui operare dalla riga di comando, non dallo standard input. Per fare quello che chiedi, in bash si usa:


ldd $(which ls)

dove l'espressione $(comando) viene sostituita dallo standard output di comando.


matteo@teokubuntu:~$ echo Output di which: $(which ls)
Output di which: /bin/ls
matteo@teokubuntu:~$ ldd $(which ls)
linux-vdso.so.1 => (0x00007fff589ff000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f130cba6000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f130c99e000)
libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f130c795000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f130c3d6000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f130c1d2000)
/lib64/ld-linux-x86-64.so.2 (0x00007f130cdea000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f130bfb4000)
libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007f130bdaf000)

carlo2002
16-02-2013, 18:15
Ok, che da come avevo capito credevo che ogni comando leggesse i dati dal file standart input, per quello cercavo di fare il pipeling in modo sbagliato.

Grazie per il chiarimento

MItaly
16-02-2013, 18:37
:ciauz:

Loading