Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.os.linux.software > #5473 > unrolled thread

Sintassi evidenziata con Mc (mcedit)

Started byYoda <yoda@pippo.invalid>
First post2021-01-07 21:38 +0000
Last post2021-01-08 15:18 +0100
Articles 11 — 3 participants

Back to article view | Back to it.comp.os.linux.software


Contents

  Sintassi evidenziata con Mc (mcedit) Yoda <yoda@pippo.invalid> - 2021-01-07 21:38 +0000
    Re: Sintassi evidenziata con Mc (mcedit) Joe <J@e.invalid> - 2021-01-07 22:51 +0100
      Re: Sintassi evidenziata con Mc (mcedit) Yoda <yoda@pippo.invalid> - 2021-01-07 23:59 +0000
        Re: Sintassi evidenziata con Mc (mcedit) Joe <J@e.invalid> - 2021-01-08 01:26 +0100
          Re: Sintassi evidenziata con Mc (mcedit) Yoda <yoda@pippo.invalid> - 2021-01-08 09:40 +0000
            Re: Sintassi evidenziata con Mc (mcedit) Joe <J@e.invalid> - 2021-01-08 11:52 +0100
              Re: Sintassi evidenziata con Mc (mcedit) Yoda <yoda@pippo.invalid> - 2021-01-08 12:53 +0000
    Re: Sintassi evidenziata con Mc (mcedit) Piergiorgio Sartor <piergiorgio.sartor.this.should.not.be.used@nexgo.REMOVETHIS.de> - 2021-01-07 23:16 +0100
      Re: Sintassi evidenziata con Mc (mcedit) Yoda <yoda@pippo.invalid> - 2021-01-07 23:59 +0000
        Re: Sintassi evidenziata con Mc (mcedit) Piergiorgio Sartor <piergiorgio.sartor.this.should.not.be.used@nexgo.REMOVETHIS.de> - 2021-01-08 12:31 +0100
        Re: Sintassi evidenziata con Mc (mcedit) Piergiorgio Sartor <piergiorgio.sartor.this.should.not.be.used@nexgo.REMOVETHIS.de> - 2021-01-08 15:18 +0100

#5473 — Sintassi evidenziata con Mc (mcedit)

FromYoda <yoda@pippo.invalid>
Date2021-01-07 21:38 +0000
SubjectSintassi evidenziata con Mc (mcedit)
Message-ID<rt7v13$r22$1@dont-email.me>
[ crosspost it.comp.os.linux.iniziare,it.comp.os.linux.software ]


Perche' con $() tra virgolette annidati mcedit sbaglia, perdendo per
strada una virgoletta? sara' un bug (difficile) o e' a me, che mi
sfugge qualcosa (facile)?

Ecco, per chiarezza, come ad esempio mi tocca scrivere:
---------
#!/bin/bash

t_UTC="$1"

ANNI="$(echo \
"$(date -u "+%Y - 1970" --date=@${t_UTC})" | bc -l)"
--------------

altrimenti, se non vado inutilmente a capo con \, l'eventuale
seguito resta come fosse tutto commentato.


[ crosspost it.comp.os.linux.iniziare,it.comp.os.linux.software ]

-- 
Yoda

[toc] | [next] | [standalone]


#5474

FromJoe <J@e.invalid>
Date2021-01-07 22:51 +0100
Message-ID<2c46.5ff7825b.c5eee@for.test.net>
In reply to#5473
Yoda <yoda@pippo.invalid> wrote:
> [ crosspost it.comp.os.linux.iniziare,it.comp.os.linux.software ]
> 
> 
> Perche' con $() tra virgolette annidati mcedit sbaglia, perdendo per
> strada una virgoletta? sara' un bug (difficile) o e' a me, che mi
> sfugge qualcosa (facile)?
> 
> Ecco, per chiarezza, come ad esempio mi tocca scrivere:
> ---------
> #!/bin/bash
> 
> t_UTC="$1"
> 
> ANNI="$(echo \
> "$(date -u "+%Y - 1970" --date=@${t_UTC})" | bc -l)"
> --------------
> 
> altrimenti, se non vado inutilmente a capo con \, l'eventuale
> seguito resta come fosse tutto commentato.
> 
> 
> [ crosspost it.comp.os.linux.iniziare,it.comp.os.linux.software ]


Cosa dovrebbe calcolare il tuo script?

Quale argomento gli dai?

t_UTC che è impostato a primo argomento cosa sarebbe?

Fai un esempio di utilizzo dello script: come lo lanci da terminale.

[toc] | [prev] | [next] | [standalone]


#5477

FromYoda <yoda@pippo.invalid>
Date2021-01-07 23:59 +0000
Message-ID<rt879m$hiu$2@dont-email.me>
In reply to#5474
Addi' 07 gen 2021 21:51:23, Joe scrive:
> Yoda <yoda@pippo.invalid> wrote:

>> [ crosspost it.comp.os.linux.iniziare,it.comp.os.linux.software ]

>> Perche' con $() tra virgolette annidati mcedit sbaglia, perdendo per
>> strada una virgoletta? sara' un bug (difficile) o e' a me, che mi
>> sfugge qualcosa (facile)?

>> Ecco, per chiarezza, come ad esempio mi tocca scrivere:
>> ---------
>> #!/bin/bash

>> t_UTC="$1"

>> ANNI="$(echo \
>> "$(date -u "+%Y - 1970" --date=@${t_UTC})" | bc -l)"
>> --------------

>> altrimenti, se non vado inutilmente a capo con \, l'eventuale
>> seguito resta come fosse tutto commentato.

>> [ crosspost it.comp.os.linux.iniziare,it.comp.os.linux.software ]


> Cosa dovrebbe calcolare il tuo script?

Il numero di anni.

> Quale argomento gli dai?

Numero di secondi, positivo sempre.

> t_UTC che è impostato a primo argomento cosa sarebbe?

La durata in secondi (ascissa temporale con origine al tempo zero
del 1/1/1970", cioe' 1970-01-01 00:00:00.000000000).

> Fai un esempio di utilizzo dello script: come lo lanci da terminale.

$: ./pippo 6546418548412028870

Mi da' gli anni civili, son molto difficili da calcolare.. se faccio
all'antica: 1 anno = 365 giorni e quattro ore, c'e' errore anche
rispetto all'anno tropico ciao comunque lo scherzetto mcedit e' da
molto che me lo fa e con molti altri script del tutto differenti

-- 
Yoda

[toc] | [prev] | [next] | [standalone]


#5478

FromJoe <J@e.invalid>
Date2021-01-08 01:26 +0100
Message-ID<4ec3.5ff7a6a3.3908f@for.test.net>
In reply to#5477
Yoda <yoda@pippo.invalid> wrote:
> Addi' 07 gen 2021 21:51:23, Joe scrive:
>> Yoda <yoda@pippo.invalid> wrote:
> 
>>> [ crosspost it.comp.os.linux.iniziare,it.comp.os.linux.software ]
> 
>>> Perche' con $() tra virgolette annidati mcedit sbaglia, perdendo per
>>> strada una virgoletta? sara' un bug (difficile) o e' a me, che mi
>>> sfugge qualcosa (facile)?
> 
>>> Ecco, per chiarezza, come ad esempio mi tocca scrivere:
>>> ---------
>>> #!/bin/bash
> 
>>> t_UTC="$1"
> 
>>> ANNI="$(echo \
>>> "$(date -u "+%Y - 1970" --date=@${t_UTC})" | bc -l)"
>>> --------------
> 
>>> altrimenti, se non vado inutilmente a capo con \, l'eventuale
>>> seguito resta come fosse tutto commentato.
> 
>>> [ crosspost it.comp.os.linux.iniziare,it.comp.os.linux.software ]
> 
> 
>> Cosa dovrebbe calcolare il tuo script?
> 
> Il numero di anni.
> 
>> Quale argomento gli dai?
> 
> Numero di secondi, positivo sempre.
> 
>> t_UTC che è impostato a primo argomento cosa sarebbe?
> 
> La durata in secondi (ascissa temporale con origine al tempo zero
> del 1/1/1970", cioe' 1970-01-01 00:00:00.000000000).
> 
>> Fai un esempio di utilizzo dello script: come lo lanci da terminale.
> 
> $: ./pippo 6546418548412028870


L'esempio non è calzante, l'argomento è troppo grande.
Quando si chiede e viene richiesto un esempio meglio
sempre fare un esempio cosrretto. Per capirsi dar modo
di fare una prova e poter verificare precisamente.

Esempio:

$ ./pippo.sh 654641849
20


Con 654641849 secondi, mi ritorna 20 anni.

Conto a spanne:

$ echo "654641849/(3600*24*365)"|bc
20

Direi che ci siamo...

Vediamo pippo.sh, molto simile al tuo:
--------------------------------------
$ cat pippo.sh
#!/bin/bash

t_UTC=$1
ANNI=$(date -u --date=@${t_UTC} +%Y-1970 |bc)
echo $ANNI
----------

Troppe virgolette non servono.

ANNI è un numero intero, non contiene spazi, virgolette non e servono.
t_UTC è un numero intero, vedi sopra

Ma soprattutto bc interpreta in input via pipe l'output del comando
"date", e non ha problemi con gli spazi.

In più l'echo che inserivi tu non serve. Già il comando date produce
l'output corretto.

Invece servono per formattare correttamente l'argomento del comando
date, se lo vuoi scrivere con gli spazi. Ma non serve neanche quello
se adiamo a vedere. Perché potresti banalmente scrivere:

date +%Y-1970

come ho messo io sopra. E ti risparmi anche quelle virgolette lì.

[toc] | [prev] | [next] | [standalone]


#5479

FromYoda <yoda@pippo.invalid>
Date2021-01-08 09:40 +0000
Message-ID<rt99a2$8e2$1@dont-email.me>
In reply to#5478
Addi' 08 gen 2021 00:26:11, Joe scrive:
> Yoda <yoda@pippo.invalid> wrote:

>> $: ./pippo 6546418548412028870

-snip-
> Vediamo pippo.sh, molto simile al tuo:
> --------------------------------------
> $ cat pippo.sh
> #!/bin/bash

> t_UTC=$1
> ANNI=$(date -u --date=@${t_UTC} +%Y-1970 |bc)
> echo $ANNI
> ----------

> Troppe virgolette non servono.

Si', me l'ha detto anche Piergiorgio. L'esempio che ho postato era
estratto da righe piu' complicate, ho sbagliato a copiare senza
controllare e scusate.
Pero' la questione riguarda mcedit soltanto, adesso lo mostro
meglio.

PRIMO CASO
script_1:
--------------
#! /bin/bash

if [ $1 -lt 0 ]; then
POSITIVO="$(echo -($1) | bc)"
fi
echo $POSITIVO
--------------------

Se do:
$: ./script_1 -3

bash mi da' errore:
-cite-
./script_1: command substitution: riga 5: errore di sintassi vicino al
token non atteso "("
./script_1: command substitution: riga 5: `echo -($1) | bc)"'
-/cite-


SECONDO CASO
Allora  ci metto le virgolette:
script_2:
--------------
#! /bin/bash

if [ $1 -lt 0 ]; then
POSITIVO="$(echo "-($1)" | bc)"
fi
echo $POSITIVO
--------------------

e adesso succedono queste due cose:
1. mcedit da' tutte le righe seguenti commentate, cioe' in verde
(in questo caso il "fi" e l' "echo $POSITIVO")
2. mentre invece bash esegue perfettamente, restituendomi 3.

Ecco, la questione-domanda e' questa ciao e grazie eh

-snip-
> ANNI è un numero intero, non contiene spazi, virgolette non e servono.
> t_UTC è un numero intero, vedi sopra
> Ma soprattutto bc interpreta in input via pipe l'output del comando
> "date", e non ha problemi con gli spazi.
> In più l'echo che inserivi tu non serve. Già il comando date produce
> l'output corretto.

Si', certo.. solo che prima il "- 1970" era fuori comando data, ho
riportato senza controllare - ariscusate:-(  e ariciao

-- 
Yoda

[toc] | [prev] | [next] | [standalone]


#5480

FromJoe <J@e.invalid>
Date2021-01-08 11:52 +0100
Message-ID<91d.5ff83978.a9221@for.test.net>
In reply to#5479
Yoda <yoda@pippo.invalid> wrote:
> 
> Pero' la questione riguarda mcedit soltanto, adesso lo mostro
> meglio.

No, l'esempio che hai mostrato è proprio sintatticamente errato.


> PRIMO CASO
> script_1:
> --------------
> #! /bin/bash
> 
> if [ $1 -lt 0 ]; then
> POSITIVO="$(echo -($1) | bc)"

Qua c'è errore. Correzione:

POSITIVO=$(echo "-($1)" | bc)

Le virgolette esterne non servono, per lo stesso motivo di
ieri. POSITIVO è un numero, niente spazi, niente virgolette.
Le virgolette interne invece servono a proteggere le parentesi,
quelle interne, -($1), che sono necessare a bc per essere
interpretate al fine del cambio segno.

mcedit che presumo sia l'editor che usi, e che non conosco,
non centra nulla fin qui.




> SECONDO CASO
> Allora  ci metto le virgolette:
> script_2:
> --------------
> #! /bin/bash
> 
> if [ $1 -lt 0 ]; then
> POSITIVO="$(echo "-($1)" | bc)"
> fi
> echo $POSITIVO
> --------------------
> 
> e adesso succedono queste due cose:
> 1. mcedit da' tutte le righe seguenti commentate, cioe' in verde
> (in questo caso il "fi" e l' "echo $POSITIVO")
> 2. mentre invece bash esegue perfettamente, restituendomi 3.
> 
> Ecco, la questione-domanda e' questa ciao e grazie eh

Intanto come già detto sopra, le virgolette esterne le
puoi togliere, non sono necessarie.
Poi evidentemente l'evidenziazione sintattica dell'editor
o va in panne oppure è proprio fatta così.
Volendo puoi anche toglierla:
F9 opzioni evidenziazione sintassi
la imposti ad unknown e via.

Altrimenti prova altri editor.
Io uso vim per lo più.
Anche lì comunque in certi casi, la sintassi evidenziata
non è sempre perfetta. Vado a memoria, ma in rare occasioni
mi sembra di ricordare qualche svarione...

Se vuoi restare su mcedit, devi cercare bene in rete su come
impostarlo correttamente per avere una schermata comoda e
cercare bene situazioni che riportano il problema rilevato,
sicuramente no sei il primo ad accorgerti di questo comportamento,
e sicuramente qualcuno lo avrà fatto presente e gli avranno anche
proposto delle soluzioni.
Se non trovi in italiano cerca in inglese. Trovi molta più roba,
manco a dirlo...

[toc] | [prev] | [next] | [standalone]


#5482

FromYoda <yoda@pippo.invalid>
Date2021-01-08 12:53 +0000
Message-ID<rt9kkl$e89$1@dont-email.me>
In reply to#5480
Addi' 08 gen 2021 10:52:40, Joe scrive:
> Yoda <yoda@pippo.invalid> wrote:

-snip-
>> SECONDO CASO
>> Allora  ci metto le virgolette:
>> script_2:
>> --------------
>> #! /bin/bash

>> if [ $1 -lt 0 ]; then
>> POSITIVO="$(echo "-($1)" | bc)"
>> fi
>> echo $POSITIVO
>> --------------------

>> e adesso succedono queste due cose:
>> 1. mcedit da' tutte le righe seguenti commentate, cioe' in verde
>> (in questo caso il "fi" e l' "echo $POSITIVO")
>> 2. mentre invece bash esegue perfettamente, restituendomi 3.

>> Ecco, la questione-domanda e' questa ciao e grazie eh

> Intanto come già detto sopra, le virgolette esterne le
> puoi togliere, non sono necessarie.
> Poi evidentemente l'evidenziazione sintattica dell'editor
> o va in panne oppure è proprio fatta così.

Allora comincio a pensare che e' proprio un bug, perche' anche se
tolgo l'errore che dici delle virgolette inutili, mcedit fa la
stessa e identica cosa: tutto il seguito e' considerato commento:
POSITIVO="$(echo "-($1)" | bc)" -> il seguito e' commento
POSITIVO=$(echo "-($1)" | bc)   -> il seguito e' commento

Dunque il bug e' che considera il blocco $("()") come una sola
virgoletta ciao e grazie eh

> Volendo puoi anche toglierla:
> F9 opzioni evidenziazione sintassi
> la imposti ad unknown e via.

> Altrimenti prova altri editor.
> Io uso vim per lo più.
> Anche lì comunque in certi casi, la sintassi evidenziata
> non è sempre perfetta. Vado a memoria, ma in rare occasioni
> mi sembra di ricordare qualche svarione...

> Se vuoi restare su mcedit, devi cercare bene in rete su come
> impostarlo correttamente per avere una schermata comoda e
> cercare bene situazioni che riportano il problema rilevato,
> sicuramente no sei il primo ad accorgerti di questo comportamento,
> e sicuramente qualcuno lo avrà fatto presente e gli avranno anche
> proposto delle soluzioni.
> Se non trovi in italiano cerca in inglese. Trovi molta più roba,
> manco a dirlo...

Ok ancora grazie.. aggiungo, a quanto sopra, che mi e' oramai
evidente che mcedit pensa che la /prima/ chiusa-parentesi che
incontra dopo $( sia di chiusura della sostituzione di comando:
$(echo "-($1)

equivale a:
$(pippo)

per cui le successive virgolette:
" | bc)

valgono come apertura d'un commento ariciao

-- 
Yoda

[toc] | [prev] | [next] | [standalone]


#5475

FromPiergiorgio Sartor <piergiorgio.sartor.this.should.not.be.used@nexgo.REMOVETHIS.de>
Date2021-01-07 23:16 +0100
Message-ID<8rdkch-f03.ln1@lazy.lzy>
In reply to#5473
On 07/01/2021 22.38, Yoda wrote:
> [ crosspost it.comp.os.linux.iniziare,it.comp.os.linux.software ]
> 
> 
> Perche' con $() tra virgolette annidati mcedit sbaglia, perdendo per
> strada una virgoletta? sara' un bug (difficile) o e' a me, che mi
> sfugge qualcosa (facile)?
> 
> Ecco, per chiarezza, come ad esempio mi tocca scrivere:
> ---------
> #!/bin/bash
> 
> t_UTC="$1"
> 
> ANNI="$(echo \
       ^--virgolette aperte> "$(date -u "+%Y - 1970" --date=@${t_UTC})"
| bc -l)"
  ^--virgolette chiuse

"a"b"c"

Significa che "a" e "c" sono tra virgolette,
non che 'a"b"c' e` tra virgolette ed anche 'b'...

Che poi, quante virgolette metti?

bye,

-- 

piergiorgio

[toc] | [prev] | [next] | [standalone]


#5476

FromYoda <yoda@pippo.invalid>
Date2021-01-07 23:59 +0000
Message-ID<rt879m$hiu$1@dont-email.me>
In reply to#5475
Addi' 07 gen 2021 22:16:40, Piergiorgio Sartor scrive:
> On 07/01/2021 22.38, Yoda wrote:
>> [ crosspost it.comp.os.linux.iniziare,it.comp.os.linux.software ]

>> Perche' con $() tra virgolette annidati mcedit sbaglia, perdendo per
>> strada una virgoletta? sara' un bug (difficile) o e' a me, che mi
>> sfugge qualcosa (facile)?

>> Ecco, per chiarezza, come ad esempio mi tocca scrivere:
>> ---------
>> #!/bin/bash

>> t_UTC="$1"

>> ANNI="$(echo \
>        ^--virgolette aperte> "$(date -u "+%Y - 1970" --date=@${t_UTC})"
> | bc -l)"
>   ^--virgolette chiuse

> "a"b"c"

> Significa che "a" e "c" sono tra virgolette,
> non che 'a"b"c' e` tra virgolette ed anche 'b'...

> Che poi, quante virgolette metti?

Si' (e no!), ma in ogni caso quello che non capiso e' perche' a bash
il comando arriva corretto anche senza l'a capo ed invece mcedit con
l'a capo non segue piu' il tuo schema-ragionamento e la smette di
commentare nel seguito.

D'altra parte m'ero distratto, perche' a date la direttiva "+%Y -
1970" posso metterla (molto meglio) tra apici: '+%Y - 1970', pero'
anche cosi' per mcedit non cambia nulla (ho provato adesso).

Pertanto vediamolo punto per punto:
ANNI="$(echo "$(date -u '+%Y - 1970' --date=@${t_UTC})" | bc -l)"
ebbene:

1. l'output di date e' ad esempio:
2023 - 1970
dunque e' obbligatorio passarlo a bc con virgolette:
"$(date -u '+%Y - 1970' --date=@${t_UTC})"
doppie perche' interviene la variabile t_UTC.

2. Resta allora soltanto l'output di bc.. dici che e' sbagliato
metterle o in ogni caso che son troppe? Be', in questo caso e' un
numero, ma considera che in altri casi potrebbero esserci spazi
(ho scritto-chiesto adesso, ma e' da molto che mcedit mi fa questo
scherzetto anche con comandi dove le virgolette sono assolutamente
indispensabili) ciao

-- 
Yoda

[toc] | [prev] | [next] | [standalone]


#5481

FromPiergiorgio Sartor <piergiorgio.sartor.this.should.not.be.used@nexgo.REMOVETHIS.de>
Date2021-01-08 12:31 +0100
Message-ID<5eslch-4s3.ln1@lazy.lzy>
In reply to#5476
On 08/01/2021 00.59, Yoda wrote:
[...]
> Si' (e no!), ma in ogni caso quello che non capiso e' perche' a bash
> il comando arriva corretto anche senza l'a capo ed invece mcedit con
> l'a capo non segue piu' il tuo schema-ragionamento e la smette di
> commentare nel seguito.

Forse perche` i due hanno parser diversi e,
di conseguenza, opinioni diverse.

In ogni caso, io cercherei di evitare tutte
queste virgolette, visto che sono comunque
una cosa non troppo corretta.

> D'altra parte m'ero distratto, perche' a date la direttiva "+%Y -
> 1970" posso metterla (molto meglio) tra apici: '+%Y - 1970', pero'
> anche cosi' per mcedit non cambia nulla (ho provato adesso).
> 
> Pertanto vediamolo punto per punto:
> ANNI="$(echo "$(date -u '+%Y - 1970' --date=@${t_UTC})" | bc -l)"
       ^       ^-chiuse
        \-aperte

Fai sempre lo stesso *errore*!

Non e` la sintassi corretta per quello
che vuoi fare tu.

Usa due variabili.

bye,

-- 

piergiorgio

[toc] | [prev] | [next] | [standalone]


#5483

FromPiergiorgio Sartor <piergiorgio.sartor.this.should.not.be.used@nexgo.REMOVETHIS.de>
Date2021-01-08 15:18 +0100
Message-ID<976mch-4s3.ln1@lazy.lzy>
In reply to#5476
On 08/01/2021 00.59, Yoda wrote:
[...]
> 1. l'output di date e' ad esempio:
> 2023 - 1970
> dunque e' obbligatorio passarlo a bc con virgolette:

No, non e` obbligatorio.
Inoltre, funziona anche *senza* echo...

Questo:

date -u '+%Y - 1970' --date=2021-01-08T15:15:42 | bc -l

Senza "echo" e senza virgolette funziona.

Al massimo, servono le virgolette intorno
alla variabile "t_UTC", se vi sono spazi,
cosa che non credo sia il caso...

bye,

-- 

piergiorgio

[toc] | [prev] | [standalone]


Back to top | Article view | it.comp.os.linux.software


csiph-web