seleccionar argumento posicional en xargs

seleccionar argumento posicional en xargs

Quiero abrir la ubicación donde está instalado Python. Para comprobar la ubicación que utilicé.

whereis python | xargs -n 1 echo

producción :


/usr/bin/python3.8

/usr/bin/python3.8-config

/usr/bin/python

/usr/lib/python2.7

/usr/lib/python3.8

/usr/lib/python3.9

/etc/python3.8

/usr/local/lib/python3.8

/usr/include/python3.8

Aunque puedo copiar más allá de la ubicación de xdg, no quiero hacerlo. Quiero usar el operador de tubería y abrir la ubicación usando xdg-open. Sin embargo, hay un problema. ¿Cómo selecciono el argumento de la lista anterior? Supongamos que quiero seleccionar la tercera ubicación. Hay alguna forma de hacerlo.

Pensé en seguir pero no funcionó.

whereis python | xargs $3 xdg-open

Respuesta1

Simplemente filtre la salida antes de pasarla a xargs:

whereis python | awk '{print $3}' | xargs xdg-open

Ese awkcomando solo imprimirá la tercera palabra, así que eso es todo lo que pasará xargs. Por supuesto, usar xargsno tiene sentido cuando solo tienes un argumento. ¿Quizás quieras esto en su lugar?

xdg-open $(whereis python | awk '{print $3}')

O simplemente use whichel cual devolverá elprimeroaparición de la cadena de búsqueda en su $PATH:

xdg-open $(which python)

Tenga en cuenta que no puede abrir pythoncon xdg-open, eso no tiene sentido ya que no existe ningún programa gráfico que pueda abrir un binario de manera útil, y mucho menos un binario que sea un lenguaje de secuencias de comandos.

Respuesta2

No creo que puedas hacerloen xargs- pero podrías hacerlo con un shell:

whereis python | xargs sh -c 'echo "$3"' sh

Sin embargo, su caso de uso particular realmente no tiene sentido, ya queseñalado por el vanadio

Respuesta3

El propósito de xargs es dar cada elemento de entrada a un comando repetidamente. No "selecciona" entre las entradas. Si quieres hacer eso, debes usar otras herramientas como head, tail, grep. Por ejemplo:

whereis python | fmt -1 | tail -n +3 | head -1

información relacionada