Per uno script bash

  • Creatore
    Topic
  • #102223
    Up
    0
    Down
    ::


    Salve.

    Sto scrivendo uno script bash per automatizzare le ultime fasi dell’installazione di TeXLive, e mi sono bloccato dinanzi al problema che segue.

    L’installer di TL crea un albero di directory nel quale un ramo tipico è, ad es.:

    `/usr/local/texlive/2015/bin/x86_64-linux/`

    In questo caso le due parti variabili del ramo sono l’anno- versione di TeXLive (2015) e l’architettura del sistema ospite (x86_64-linux).

    Orbene, mi si può indicare con quali comandi bash, o con quali comandi presenti su TeXLive, posso ottenere a terminale la stringa relativa al sistema ospite? Quella cioè che viene assegnata come nome alla sotto-directory?

    Grazie e ciao.

Visualizzazione 6 filoni di risposte
  • Autore
    Risposte
    • #102224
      Up
      0
      Down
      ::


      Il seguente comando funziona:

      `python -c “import platform as _p; s=_p.machine()+'-'+_p.system().lower(); print s”`

      ma ricorrere ad uno script python mi sembra un pò macchinoso e prono ad errori occulti. Esiste niente di più “diretto”?

      Ciao e grazie.

    • #102225
      Up
      0
      Down
      ::


      Senza spare il fuoco con Python, il comando [tt]uname[/tt] fa la stessa cosa
      `$ echo “$(uname -m)-$(uname -s|tr '[:upper:]' '[:lower:]')”`
      Ma se sei certo che c’è una sola sottocartella in [tt]/usr/local/texlive/2015/bin[/tt] ottieni quella cartella semplicemente con
      `$ echo “/usr/local/texlive/2015/bin/*”`

    • #102226
      robitex
      Amministratore del forum
        Up
        0
        Down
        ::

        Sam Qasbah” post=102040Salve.

        Sto scrivendo uno script bash per automatizzare le ultime fasi dell’installazione di TeXLive, e mi sono bloccato dinanzi al problema che segue.

        L’installer di TL crea un albero di directory nel quale un ramo tipico è, ad es.:

        `/usr/local/texlive/2015/bin/x86_64-linux/`

        In questo caso le due parti variabili del ramo sono l’anno- versione di TeXLive (2015) e l’architettura del sistema ospite (x86_64-linux).

        Orbene, mi si può indicare con quali comandi bash, o con quali comandi presenti su TeXLive, posso ottenere a terminale la stringa relativa al sistema ospite? Quella cioè che viene assegnata come nome alla sotto-directory?

        Grazie e ciao.

        Ciao Sam.
        Non mi è chiaro cosa intendi per “automatizzare le ultime fasi dell’installazione di TeX Live”.
        Il processo non è già di per sé automatico?
        R.

      • #102227
        Up
        0
        Down
        ::



        @elrond
        :

        La tua soluzione, provata su macchine diverse, dà gli stessi risultati della mia: tutti e due inaffidabili. Infatti su una macchina la stringa risultante dagli script è “[tt]i686-linux[/tt]” mentre il ramo della installazione TeXLive è “[tt]/usr/local/texlive/2015/bin/i386-linux/[/tt]”.

        E allora forse è utile seguire un altro approccio:
        1) determinare la directory voluta individuandola come contenente un certo file, ad es.: [tt]mktexmf[/tt]
        `$ locate '/*/texlive/*/mktexmf'
        $ /usr/local/texlive/2015/bin/x86_64-linux/mktexmf`

        2) lavorare sulla stringa risultante per isolare il dato che ci interessa. Tralascio i passaggi intermedi, il comando risultante è la simpatica linea sottostante.

        `$ SYS=$(locate '/*/texlive/*/mktexmf'|python -c “import sys; l=[line for line in sys.stdin.readlines()]; print(l[0].split('bin/')[1].split('/mktexmf')[0])”)
        $ echo $SYS
        $ x86_64-linux`

        Ma sono certo che DEVE esistere una soluzione più semplice e ‘naturale’.


        @robitex

        “Le ultime fasi della installazione di TeXLive” sono quelle di cui si parla in questo documento di Enrico Gregorio e in questo post del tuo blog.

        @tutti
        Aspetto suggerimenti.

        Ciao e grazie.

      • #102228
        Up
        0
        Down
        ::

        Sam Qasbah” post=102049 @elrond:

        La tua soluzione, provata su macchine diverse, dà gli stessi risultati della mia: tutti e due inaffidabili. Infatti su una macchina la stringa risultante dagli script è “[tt]i686-linux[/tt]” mentre il ramo della installazione TeXLive è “[tt]/usr/local/texlive/2015/bin/i386-linux/[/tt]”.

        Non ho idea di come TeX Live decida di chiamare le cartelle, io ho solo tradotto il comando Python in bash. Quello dei sistemi i386/i686 è un bel guaio: [tt]uname[/tt] riporta correttamente l’architettura del sistema, ma spesso altri programmi, come TeX Live in questo caso, usano i386 o i686 come nome collettivo per indicare entrambe le architetture.

        Sam Qasbah” post=102049E allora forse è utile seguire un altro approccio:
        1) determinare la directory voluta individuandola come contenente un certo file, ad es.: [tt]mktexmf[/tt]
        `$ locate '/*/bin/*/mktexmf'
        $ /usr/local/texlive/2015/bin/x86_64-linux/mktexmf`

        Questa mi sembra una variante di quanto avevo suggerito io, sapendo dove andare a parare. Ovviamente tu sai a cosa ti serve lo script, ma ti consiglio di considerare la possibilità che uno abbia più installazioni di TeX Live sul proprio sistema (io faccio così, quando possibile), quindi
        `$ locate '/*/bin/*/mktexmf'`
        mi restituisce più di un risultato. Suggerirei di specificare l’anno con
        `$ locate '/*/2015/bin/*/mktexmf'`

        Sam Qasbah” post=1020492) lavorare sulla stringa risultante per isolare il dato che ci interessa. Tralascio i passaggi intermedi, il comando risultante è la simpatica linea sottostante.

        `$ SYS=$(locate '/*/bin/*/mktexmf'|python -c “import sys; l=[line for line in sys.stdin.readlines()]; print(l[0].split('bin/')[1].split('/mktexmf')[0])”)
        $ echo $SYS
        $ x86_64-linux`

        Usando solo bash:
        `echo “$(basename “$(dirname “$(locate '/*/2015/bin/*/mktexmf')”)”)”`

        Sam Qasbah” post=102049Ma sono certo che DEVE esistere una soluzione più semplice e ‘naturale’.

        Il metodo più naturale sarebbe vedere come sceglie i percorsi il programma di installazione di TeX Live. Per quanto riguarda il problema i386/i686, probabilmente basterebbe un controllo ([tt]if[/tt] o [tt]case[/tt]) per scegliere in entrambi i casi [tt]i386[/tt]. Quali sono gli altri possibili percorsi?

      • #102229
        Up
        0
        Down
        ::

        Elrond” post=102050

        Usando solo bash:
        `echo “$(basename “$(dirname “$(locate '/*/2015/bin/*/mktexmf')”)”)”`
        […]
        Il metodo più naturale sarebbe vedere come sceglie i percorsi il programma di installazione di TeX Live.

        La linea bash è elegante, ti ringrazio.

        Effettivamente LA soluzione sarebbe di stabilire come fa l’installer di TL a determinare l’albero di installazione e riprodurre quel procedimento. Purtroppo l’installer ([tt]install-tl[/tt]) è costituito da uno script perl, linguaggio a me ignoto. Peraltro sembra che il perl non possa essere usato per costruire comandi bash e filtri inline, quindi per riprodurre quell’esatto procedimento dovrei costruire uno script in un file a parte e chiamare quel file da bash. Davvero troppo.

      • #102230
        robitex
        Amministratore del forum
          Up
          0
          Down
          ::


          Nel manuale di tex live trovi le directory prefefinite.
          $ texdoc texlive
          Quanto al problema ho provato a usare kpsewhich per trovare il percorso degli eseguibili ma sembra non funzionare per la directory bin.
          Saluti.
          R.

      Visualizzazione 6 filoni di risposte
      • Devi essere connesso per rispondere a questo topic.

      Go to top