Я хочу открыть место, где установлен 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