Неправильный способ перечисления версий python из bash

Из-за бюрократии я столкнулся с ситуацией, когда я могу заставить кого-то запустить сценарий bash на сервере Linux и дать мне результаты, но я не могу войти туда или сам запустить сценарий.

Я вполне уверен, что на сервере, на котором работает сервер Debian или Ubuntu.

Я хочу узнать, какой python и какие версии g++ установлены (длинный рассказ).

Пока что моя лучшая идея – получить $PATH , разделить ее на : а затем искать все пути для всего, что соответствует python , g++ соответственно.

Есть ли более здравый путь?

6 Solutions collect form web for “Неправильный способ перечисления версий python из bash”

Следующее должно работать для g ++, если у вас нет локальных установок g ++.

 dpkg -l 'g++*' 

В моей системе это дает:

 dpkg -l 'g++*' Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-================================-=====================-=====================-====================================================================== ii g++ 4:4.9.2-2 amd64 GNU C++ compiler ii g++-4.6 4.6.3-14 amd64 GNU C++ compiler un g++-4.6-multilib <none> <none> (no description available) ii g++-4.9 4.9.2-10 amd64 GNU C++ compiler ii g++-4.9-multilib 4.9.2-10 amd64 GNU C++ compiler (multilib files) ii g++-multilib 4:4.9.2-2 amd64 GNU C++ compiler (multilib files) 

Для Python аналогичный подход заставит слишком много ложных срабатываний, потому что на Debian и его производных все библиотеки Python начинаются с python- . Таким образом, нужен более утонченный шаблон шара.

Что-то вроде

 dpkg -l 'python?.?' 

должно сработать.

 dpkg -l 'python?.?' Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-================================-=====================-=====================-====================================================================== ii python2.6 2.6.8-1.1 amd64 Interactive high-level object-oriented language (version 2.6) ii python2.7 2.7.9-2 amd64 Interactive high-level object-oriented language (version 2.7) un python3.1 <none> <none> (no description available) ii python3.4 3.4.2-1 amd64 Interactive high-level object-oriented language (version 3.4) 

С zsh :

 $ type -ma '(python|g++)*' g++ is /usr/bin/g++ g++-4.4 is /usr/bin/g++-4.4 g++-4.6 is /usr/bin/g++-4.6 g++-5 is /usr/bin/g++-5 python is /usr/bin/python python-config is /usr/bin/python-config python-coverage is /usr/bin/python-coverage python2 is /usr/bin/python2 python2-config is /usr/bin/python2-config python2-coverage is /usr/bin/python2-coverage python2-gflags2man is /usr/bin/python2-gflags2man python2.7 is /usr/bin/python2.7 python2.7-config is /usr/bin/python2.7-config python2.7-coverage is /usr/bin/python2.7-coverage python3 is /usr/bin/python3 python3.2 is /usr/bin/python3.2 python3.2mu is /usr/bin/python3.2mu python3.4 is /usr/bin/python3.4 python3.4m is /usr/bin/python3.4m python3.5 is /usr/bin/python3.5 python3.5m is /usr/bin/python3.5m python3m is /usr/bin/python3m pythontex is /usr/bin/pythontex pythontex3 is /usr/bin/pythontex3 

Подобно type cmd но сообщает команды (и псевдонимы, функции и встроенные функции, которые были бы релевантны, если оболочка пользователя окажется zsh ), которая обрабатывает шаблон.

Если вы хотите, чтобы версии находились в $ PATH, вы можете запускать:
python -V ; g++ --version

Просто используйте диспетчер пакетов ОС для запроса:

 $ dpkg -l | awk '/^ii/ && $2 ~ /^python[0-9](\.[0-9]+)+$/ {print $2}' python2.6 python2.7 python3.2 python3.4 

Вы можете использовать which -a для поиска пути.

 function get_versions { for p in $(which -a $1); do $p --version done } get_versions python get_versions g++ 

Учитывая, что вы не знаете все о системе, в которой будет работать ваш скрипт, и вам не придется легко ее фиксировать, вы должны держать ее в покое и с низким уровнем допущений.

Напишите переносимый скрипт sh, который перечисляет PATH . Это касается установки без пакета, а также установки пакета, если установки, отличные от пакета, находятся в рекламируемом месте. (Если вы не можете доверять администраторам, чтобы сделать установки, которые вы хотите обнаружить, вам лучше установить свои собственные.)

 #!/bin/sh set -f; IFS=: set -- $PATH set +f; unset IFS for dir; do if [ -x "$dir/python" ]; then printf %s "$dir/python is "; "$dir/python -V; fi ls -l "$dir/python"* 2>/dev/null if [ -x "$dir/python" ]; then printf %s "$dir/g++ is "; "$dir/g++ --version | head -n 1; fi ls -l "$dir/g++"* 2>/dev/null done 

Результат этого скрипта – всего лишь образец, вы можете упростить анализ.

  • Конкатенация строковой переменной внутри цикла for в оболочке bash
  • при чтении строки в сценарии оболочки - как остановить цикл?
  • Есть ли способ, которым я могу запутать сценарий оболочки «.sh»?
  • Разбор строки в строковой литературе в оболочке
  • Как отфильтровать некоторые файлы из моего каталога?
  • Установить переменную на случайный элемент в массиве
  • Два условия в if (только положительные числа без букв)
  • как генерировать только один специальный символ в этом генераторе паролей
  • bash: синтаксическая ошибка около неожиданного токена `('
  • Распечатайте все приведенные ниже строки после совпадения
  • В чем разница между #! / Bin / bash и #! / Usr / bin / env bash
  • Скрипт работает вечно
  • Interesting Posts

    Как включить IOMMU на Gigabyte 990FXA-UD5 R5

    как получить полный аргумент командной строки, переданный процессу в системах unix / linux?

    Настройка сервера OpenVPN

    Bash – получить строку, содержащую пробелы в цикле

    Невозможно получить данные DBUS для автоматического изменения состояния pidgin

    Что означают числа в цепочках INPUT, FORWARD, OUTPUT в файле конфигурации iptables?

    Чистая переустановка приложения

    Я хочу, чтобы поведение тачпада на Apple Magic Mouse на Linux

    OpenBSD с только a / 32 неоднократно удаляет свой статический маршрут в мир

    Как я могу создать резервную копию Win7 перед установкой монетного двора вместе с ним

    Бесплатное распространение gnu / linux для веб-сервера

    Переносимость исполняемого файла другой машине Linux

    Файл имеет байты – кажется пустым

    Не могу пинговать машину на eth0; Пункты штрафа на wlan0; Centos 6.5 на Dell D610

    Система зависает иногда после возобновления с приостановки

    Linux и Unix - лучшая ОС в мире.