selecione argumento posicional em xargs

selecione argumento posicional em xargs

Quero abrir o local onde o python está instalado. Para verificar o local que usei.

whereis python | xargs -n 1 echo

saída :


/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

Embora eu possa copiar o local do xdg, mas não quero fazer isso. Quero usar o operador pipe e abrir o local usando xdg-open. No entanto, há um problema. Como seleciono o argumento da lista acima. Suponha que eu queira selecionar o terceiro local. Há alguma forma de fazer isso.

Pensei em seguir mas não funcionou.

whereis python | xargs $3 xdg-open

Responder1

Basta filtrar a saída antes de passá-la para xargs:

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

Esse awkcomando imprimirá apenas a terceira palavra, então é tudo para o qual você passará xargs. É claro que usar xargsé inútil quando você tem apenas um argumento. Talvez você queira isso em vez disso?

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

Ou simplesmente use whichwhich retornará oprimeiroocorrência da string de pesquisa em seu $PATH:

xdg-open $(which python)

Observe que você não pode abrir pythoncom xdg-open, isso não faz sentido, pois não existe nenhum programa gráfico que possa abrir um binário de forma útil, muito menos um binário que seja uma linguagem de script.

Responder2

Eu não acho que você pode fazer issoem xargs- mas você poderia fazer isso com um shell:

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

No entanto, seu caso de uso específico não faz sentido, poisapontado pelo vanádio

Responder3

O objetivo do xargs é fornecer repetidamente cada item de entrada para um comando. Ele não "seleciona" as entradas. Se quiser fazer isso, você deve usar outras ferramentas como head, tail, grep. Por exemplo:

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

informação relacionada