выберите позиционный аргумент в xargs

выберите позиционный аргумент в xargs

Я хочу открыть место, где установлен python. Чтобы проверить место, которое я использовал.

whereis python | xargs -n 1 echo

выход :


/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

Хотя я могу скопировать местоположение для xdg, но я не хочу этого делать. Я хочу использовать оператор конвейера и открыть местоположение с помощью xdg-open. Однако есть одна проблема. Как мне выбрать аргумент из списка выше. Предположим, я хочу выбрать 3-е местоположение. Есть ли способ сделать это.

Я думал последовать примеру, но не вышло.

whereis python | xargs $3 xdg-open

решение1

Просто отфильтруйте вывод перед передачей его в xargs:

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

Эта awkкоманда выведет только 3-е слово, так что это все, что вы передадите в xargs. Конечно, использование xargsбессмысленно, когда у вас есть только один аргумент. Возможно, вы хотите это вместо этого?

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

Или просто используйте, whichкоторый вернетпервыйвхождение строки поиска в вашем $PATH:

xdg-open $(which python)

Обратите внимание, что вы не можете открыть pythonего с помощью xdg-open, это бессмысленно, поскольку не существует графической программы, которая могла бы с пользой открыть двоичный файл, не говоря уже о двоичном файле, являющемся языком сценариев.

решение2

Я не думаю, что ты сможешь это сделать.в xargs- но это можно сделать и с помощью оболочки:

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

Однако ваш конкретный вариант использования на самом деле не имеет смысла, так какуказанный ванадием

решение3

Цель xargs — повторно передать каждый элемент ввода команде. Он не «выбирает» из ввода. Если вы хотите сделать это, вам следует использовать другие инструменты, такие как head, tail, grep. Например:

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

Связанный контент