Сценарий Bash для создания символьных ссылок на общие библиотеки

Привет, я попробую это и работаю для меня:

<?php

    $cf = "DTRMRA48P55D539C";
    $chiave = "700400125745081";
    $numdoc = "AV1871102";
    $tipodoc = 1;
        //$numid = 

Привет, я попробую это и работаю для меня:

[110]POST['numid']; $codoper = "PCCPLA66T11L719L"; $idag = "35852"; $wsdl = "https://portalws.inps.it/ws/wsCessioneQuintoWebTest/WsInpsCessioneQuinto.asmx?WSDL"; $local_cert = "C:\\Apache24\htdocs\sirio2.pem"; $soapClient = new SoapClient($wsdl, array('local_cert' => $local_cert, 'trace' => 1, 'soap_version' => SOAP_1_1)); $result = $soapClient->RichiestaCedibilita(array('CodFiscale' => $cf, 'ChiavePensione' => $chiave, 'NumDocumento' => $numdoc, 'TipoDocumento' => 1, 'CodiceOperatore' => $codoper, 'IdentificativoAgenzia' => $idag)); $xml = simplexml_load_string($result->RichiestaCedibilitaResult); echo ($xml->Cedibilita->Id); ?>
6
задан 8 revs 22 January 2009 в 09:36
поделиться

2 ответа

for baselib in "$@"
do
     shortlib=$baselib
     while extn=$(echo $shortlib | sed 's/\.[0-9][0-9]*$//')
           [ -n "$extn" ]
     do
         shortlib=$(basename $shortlib $extn)
         ln -s $baselib $shortlib
     done
done

Я обманул - все ссылки переходят к основной библиотеке (libmythings.so.1.1); если Вы действительно хотите объединить в цепочку, то Вам нужно:

for baselib in "$@"
do
     shortlib=$baselib
     while extn=$(echo $shortlib | sed 's/\.[0-9][0-9]*$//')
           [ -n "$extn" ]
     do
         shorterlib=$(basename $shortlib $extn)
         ln -s $shortlib $shorterlib
         shortlib=$shorterlib
     done
done           

Остерегайтесь - непротестированный код.


Гордость предшествует Немезиде.

Комментарий прибыл, что код выше не работает - и комментарий корректен. Исправленная версия с тестом на месте:

set -- libname.so.5.1.1

for baselib in "$@"
do
    shortlib=$baselib
    while extn=$(echo $shortlib | sed -n '/\.[0-9][0-9]*$/s/.*\(\.[0-9][0-9]*\)$/\1/p')
          [ -n "$extn" ]
    do
        shortlib=$(basename $shortlib $extn)
        echo ln -s $baselib $shortlib
    done
done

Изменение находится в sed команда. Эта версия ничего не печатает по умолчанию (-n), соответствует только строкам, заканчивающимся точкой, сопровождаемой цифрами, и затем удаляет все за исключением того, что суффикс, и печатает то, что остается для присвоения на extn. Как исправлено, сценарий генерирует вывод ниже. Удалите эхо, чтобы заставить это выполнять команды ссылки.

ln -s libname.so.5.1.1 libname.so.5.1
ln -s libname.so.5.1.1 libname.so.5
ln -s libname.so.5.1.1 libname.so

Сценарий иллюстрирует интересный и часто пропускаемый тезис о сценариях оболочки: последовательность операций в блоке условия некоторое время не должна быть единственной командой. Состояние строки с операцией редактирования не влияет, успешно выполняется ли тест в целом; статус выхода последней команды,'[ -n "$extn" ]', средства управления, продолжается ли цикл.

7
ответ дан 8 December 2019 в 04:56
поделиться

Я верю ldconfig стандартный инструмент, который делает это.

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

РЕДАКТИРОВАНИЕ Да, если Вы работаете

ldconfig -v 

Вы будете видеть, что он генерирует все ссылки на основе внутренностей библиотеки.

ldconfig /path/to/dir 

Только создаст ссылки для файлов в том dir

Примечание, хотя, я играл с ним, и это, кажется, последовательно не создает .so$, просто .so. {Главный}

Я не уверен, как его внутренности работают, но я действительно знаю:

lib # rm libmagic.so
lib # rm libmagic.so.1
lib # ldconfig 
lib # file libmagic.so.1   
libmagic.so.1: symbolic link to `libmagic.so.1.0.0'
lib # file libmagic.so 
libmagic.so: cannot open `libmagic.so' (No such file or directory)

Таким образом, то, что определяет, как это работает, является тайной мне

Редактирование На Далее Discetion, .la файлы не имеют никакого влияния на поведение.

"ТАКИМ ОБРАЗОМ", поле имени указывает на то, чем назовут символьную ссылку.

И только будет тот.

0x000000000000000e (SONAME) Библиотека soname: [libmagix.so]

Это после взламывает код и заменяет ".1" пробелами.

ldconfig генерировал "libmagic.so" (да, включенные пробелы)

13
ответ дан 8 December 2019 в 04:56
поделиться
Другие вопросы по тегам:

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