Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [bash] sostituire variabili

    ciao!

    Ho un piccolo problema spero facilmente risolvibile con uno scriptino...

    Ho un file sorgente in python con un programma che dovrei tradurre in francese e inglese...
    Pensavo di sostituire semplicemente le frasi con una variabile (esemio trad1 trad2 ecc ecc) in modo poi da scrivere 3 file a parte con il valore assunto dalle variabili...

    quindi nel file sorgente con scritto:

    echo "ciao"

    mettero'

    echo $trad1;

    e scrivero' altri 3 file con il valore nella lingua giusta...
    es

    francese => trad1="salut"
    inglese => trad1="hi"

    ora come faccio a sostuire con uno script la frase alla variabile giusta in modo da avere alla fine 3 file per 3 lingue?

    Spero si sia capito ma questa sera sono veramente stanco... :berto: :berto:

    grazie!

  2. #2
    Basta valorizzare le variabili all'inizio dello script, facendogli leggere il file delle traduzioni con
    codice:
    source ./path/file_traduzione.dat
    Ovviamente puoi variare il file usando a sua volta una variabile con la lingua desiderata.
    NeapoliX GNU/Linux
    "Alla maggior parte della gente piace leggere la propria scrittura e annusare l'odore dei propri peti." (Auden)

  3. #3
    grazie!

    pero' in questo modo avrei 3 file ...
    uno di base e 3 con le lingue... io vorrei sostituire direttamente nel file base con il codice e fare in modo di distribuire un solo file...

    è fattibile in questo modo?

    grazie mille della risposta!

  4. #4
    Cioè, tutte le lingue e lo script nel file dello script stesso ?
    Potresti usare un case - switch ...
    NeapoliX GNU/Linux
    "Alla maggior parte della gente piace leggere la propria scrittura e annusare l'odore dei propri peti." (Auden)

  5. #5
    una specie di #DEFINE in c...

    praticamente fare una sostituzione di massa delle variabili contenenti la stringa della lingua desiderate direttamente nel file sorgente...

    tipo sostituire la stringa "Attendere prego..." con $trad1

    e poi fare 1 file di testo contenente

    $trad1 => "wait please"

    e un'altro $trad1 => "attender"

    e poi con questo script sostituire al file sorgente automaticamente tutte le variabili $trad* con quelle contenute dentro al file lingua... in modo da avere 3 file sorgente in 3 lingue diverse e non un file binario e 3 file lingua...

    è un po' un casotto da spiegare ma spero si capisca...

    grazie!

  6. #6
    In questo mondo decade l'uso delle variabili, tanto vale che al loro posto ci metti dei marker, tipo al posto di $trad1 ##trad1## cosi` eviti di avere dei conflitti.

    Quindi il tuo file sorgente assumera` l'aspetto:

    codice:
    if pippo 
       print ##trad1##
    else
       print ##trad2##
    if
    poi crei i tuoi file lingua

    codice:
    ##trad1##::ciao
    ##trad2##::casa
    codice:
    ##trad1##::hello
    ##trad2##::home

    e quindi lo script bash per le traduzioni

    codice:
    #!/bin/bash
    
    SRC=$(cat $1)
    LAN=$2
    
    IFS="\n"
    for i in $(cat $LAN); do
    LAB=$(echo $i | awk -F:: '{print $1}')
    TRA=$(echo $i | awk -F:: '{print $2}')
    echo $SRC | sed s/$LAB/$TRA/g
    done
    Quindi ammettento che il tuoi script si chiami sor.py e i file di lingua IT.txt EN.txt etc., mentre lo script bash traduttore.sh

    codice:
    traduttore.sh sor.py EN.txt > script-EN.py
    Una cosa cosi` che puoi raffinare a piacere. Ciao.
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  7. #7
    ti ringrazio tantissimo era proprio questo che cercavo!

    mi ci metto subito dietro!

    grazie ancora!

  8. #8
    mi da un errore...

    neon@debian:~/ktraduttore$ ./traduttore.sh sor.py IT.txt > sor.it.py
    sed: espressione -e #1, carattere 11: comando `s' non terminato

    levando IFS="\n" non mi da piu' l'errore ma l'output è sbagliato...

    avete qualche idea su come risolvere?

  9. #9
    nada ho provato di nuovo ma non riesco proprio a capire dove sia l'errore... avete idee?

  10. #10
    Prova e definire IFS cosi`:

    codice:
    IFS="
    "
    Lo script modificato:

    codice:
    #!/bin/bash
    
    SRC=$(cat $1)
    LAN=$2
    
    IFS="
    "
    for i in $(cat $LAN); do
    LAB=$(echo $i | awk -F:: '{print $1}')
    TRA=$(echo $i | awk -F:: '{print $2}')
    SRC=$(echo $SRC | sed -e "s/${LAB}/${TRA}/g")
    done
    echo $SRC
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.