Что происходит, когда два процесса прослушивают один и тот же [файловый] сокет Berkeley/Unix?

Давайте сделаем это! К сожалению, существующие ответы несовершенны по ряду очевидных причин, в том числе и здесь, и в популярном дубликате .

Принятый ответ , например, является Bash -специфическим(плохим)и жестко кодирует желаемый шаблон поиска в одну -из 10 -функцию оболочки строки(это еще хуже). Следующий по количеству голосов ответ использует основанные на FUSE -псевдо--файловые системы (, которые явно безумны). Точно так же ответ с наибольшим количеством голосов в вышеупомянутом дубликате дает неоднозначный, -неудобочитаемый для человека -вывод(просто... тьфу).

Я — сморщенное неодобрение Джека.

Рабочий код или его не было

На ринг вышел новый претендент:

# str find_in_zip(str regex, str zip_filename1,...)
#
# Find all paths contained in any zip-formatted archives with the passed
# filenames such that the relative pathnames of these paths in these
# archives match the passed extended regular expression.
function find_in_zip() {
    (( $# >= 2 )) || {
        echo 'Expected one extended regular expression and one or more zip filenames.' 1>&2
        return 1
    }

    # Localize and remove the passed regex from the argument list.
    local regex="${1}" zip_filename
    shift

    # For each passed zip filename...
    for zip_filename in "${@}"; do
        # Print the name of this filename for disambiguity.
        echo "${zip_filename}:"

        # Print all paths in this file matching this regex.
        command unzip -l "${zip_filename}" |
            command grep --extended-regexp --color=always "${regex}"
    # Page the above output for readability.
    done | less --RAW-CONTROL-CHARS
}

Для удобства эта функция вызывается с той же сигнатурой, что и grep. А именно, эта функция сначала принимает искомое регулярное выражение, а затем вариативную последовательность одного или нескольких имен zip-файлов.

Аналогичным образом, эта функция была протестирована как в Bash, так и в zsh. Добавьте приведенный выше код в ~/.bashrcили ~/.zshrc, и великая слава zip-файла будет у вас, в идеале с включенным set -eдля здравомыслия и строгости.

Примеры или этого не было

Чтобы продемонстрировать,давайте найдем набор всех классов, встроенных в I2P файлы JAR, установленные в Gentoo Linux, имена которых начинаются ровно с семи символов верхнего регистра, за которыми следует один символ нижнего регистра – просто потому, что:

$ find_in_zip '/[A-Z]{7}[a-z]' /usr/share/i2p/lib/*.jar
/usr/share/i2p/lib/addressbook.jar:
/usr/share/i2p/lib/BOB.jar:
/usr/share/i2p/lib/commons-el.jar:
/usr/share/i2p/lib/desktopgui.jar:
/usr/share/i2p/lib/i2p.jar:
      568  01-16-2020 00:20   freenet/support/CPUInformation/AMDCPUInfo.class
      236  01-16-2020 00:20   freenet/support/CPUInformation/VIACPUInfo.class
/usr/share/i2p/lib/i2psnark.jar:
/usr/share/i2p/lib/i2ptunnel.jar:
/usr/share/i2p/lib/jasper-compiler.jar:
/usr/share/i2p/lib/jasper-runtime.jar:
/usr/share/i2p/lib/jetty-continuation.jar:
/usr/share/i2p/lib/jetty-deploy.jar:
/usr/share/i2p/lib/jetty-http.jar:
/usr/share/i2p/lib/jetty-i2p.jar:
/usr/share/i2p/lib/jetty-io.jar:
/usr/share/i2p/lib/jetty-java5-threadpool.jar:
/usr/share/i2p/lib/jetty-rewrite-handler.jar:
/usr/share/i2p/lib/jetty-security.jar:
/usr/share/i2p/lib/jetty-servlet.jar:
/usr/share/i2p/lib/jetty-servlets.jar:
/usr/share/i2p/lib/jetty-sslengine.jar:
/usr/share/i2p/lib/jetty-start.jar:
/usr/share/i2p/lib/jetty-util.jar:
/usr/share/i2p/lib/jetty-webapp.jar:
/usr/share/i2p/lib/jetty-xml.jar:
/usr/share/i2p/lib/jstl.jar:
/usr/share/i2p/lib/mstreaming.jar:
/usr/share/i2p/lib/org.mortbay.jetty.jar:
/usr/share/i2p/lib/org.mortbay.jmx.jar:
/usr/share/i2p/lib/routerconsole.jar:
/usr/share/i2p/lib/router.jar:
     5598  01-16-2020 00:20   org/cybergarage/upnp/ssdp/HTTPMUSocket.class
/usr/share/i2p/lib/sam.jar:
/usr/share/i2p/lib/standard.jar:
/usr/share/i2p/lib/streaming.jar:
/usr/share/i2p/lib/systray.jar:

Вы... вероятно, не хотели бы делать это вручную.

2
12.03.2021, 03:22
0 ответов

Теги

Похожие вопросы