[Risolto] BASH: come far espandere le variabili?

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
Sargonsei
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2614
Iscrizione: domenica 17 febbraio 2008, 13:56

[Risolto] BASH: come far espandere le variabili?

Messaggio da Sargonsei »

Quando eseguo lo script

Codice: Seleziona tutto

#!/bin/bash
# Salvare questo script BASH col nome [ScriveSuVideo0.txt] nella cartella di lavoro,
# aprire un terminale nella cartella di lavoro
# ed impartire il comando
# ./ScriveSuVideo0.txt
# Questo script serve per inserire una riga di testo all'interno di un file {$V1}
#
Px='(w-text_w)/2' # Imposta la distanza (in pixels) fra la riga di Testo ed il bordo sinistro del video.
Py='(h-text_h)/2' # Imposta la distanza (in pixels) fra la riga di Testo ed il bordo sinistro del video.
# ^ ^ ^ Posiziona il testo al centro dello schermo.
F0='/usr/share/fonts/truetype/freefont/FreeSerif.ttf' # Imposta font di caratteri.
F1='h/10' # Imposta altezza font di caratteri pari ad 1/10 dell'immagine (in pixels).
#
T0='Centro dello schermo.' # Imposta il contenuto della riga di Testo da sovrascrivere al video.
T1='green' # Imposta il colore della riga di Testo.
T2='0.4' # Imposta l'opacità del colore della riga di Testo [0.0=Trasparente, 1.0=Coprente].
T3='red' # Imposta il colore dello sfondo della riga di Testo.
T4='0.2' # Imposta l'opacità dello sfondo della riga di Testo [0.0=Trasparente, 1.0=Coprente].
V1='P1040025.MP4' # Imposta nome del video da elaborare.
V2='videoOut.mp4' # Imposta nome del video elaborato.
#
C0='ffmpeg -i ${V1} -vf drawtext="fontfile=${F0}: text=${T0}: x=${Px}: y=${Py}: fontsize=${F1}: fontcolor=${T1}@${T2}: box=1: boxcolor=${T3}@${T4}" ${V2}' # Elabora testo del comando.
echo $C0; eval $C0 # Mostra; ed esegue il contenuto di C0.
#
l'output del comando
echo $C0
è

Codice: Seleziona tutto

ffmpeg -i ${V1} -vf drawtext="fontfile=${F0}: text=${T0}: x=${Px}: y=${Py}: fontsize=${F1}: fontcolor=${T1}@${T2}: box=1: boxcolor=${T3}@${T4}" ${V2}
Come devo scriverlo per vedere il contenuto delle variabili, e non le variabili?
Ringrazio sin d'ora chi mi aiuterà.
Ultima modifica di Sargonsei il mercoledì 24 luglio 2024, 13:27, modificato 2 volte in totale.
Postare l'output di un comando significa inserire nel post: la riga in cui si digita il comando, tutto l'output, e la riga in cui il prompt ricompare.
Hardware e Sistema Operativo di Sargonsei: http://sargonsei.altervista.org/hardwar ... r-fisso-2/
Comandi da tenere a portata di mano: http://sargonsei.altervista.org/655-2/
Avatar utente
steff
Moderatore Globale
Moderatore Globale
Messaggi: 40529
Iscrizione: domenica 18 febbraio 2007, 19:48
Desktop: LXQt + Niri | Hyprland
Distribuzione: Arch; Debian; Ubuntu Server
Sesso: Maschile
Località: Toscana

Re: BASH: come far esplodere le variabili?

Messaggio da steff »

Forse usando le virgolette

Codice: Seleziona tutto

 fontsize="${F1}"
Credo che vuoi espandere le variabile, non farli esplodere no?
Hai fatto un backup oggi? Ieri?? Quando???
La Documentazione da consultare e la FAQ sul uso del forum
Sistemi: LXQt - semplice, modulare e configurabile + *ubuntu in Vbox
Avatar utente
Sargonsei
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2614
Iscrizione: domenica 17 febbraio 2008, 13:56

Re: [Risolto] BASH: come far espandere le variabili?

Messaggio da Sargonsei »

Si hai ragione su tutto... ho corretto l'oggetto del primo post, ed ho aggiunto un po' di apici... ora sembra funzionare...

Codice: Seleziona tutto

#!/bin/bash
# Salvare questo script BASH col nome [ScriveSuVideo1.txt] nella cartella di lavoro,
# aprire un terminale nella cartella di lavoro
# ed impartire il comando
# ./ScriveSuVideo1.txt
# Questo script serve per inserire una riga di testo all'interno di un file {$V1}
#
Px='(w-text_w)/2' # Imposta la distanza (in pixels) fra la riga di Testo ed il bordo sinistro del video.
Py='(h-text_h)/2' # Imposta la distanza (in pixels) fra la riga di Testo ed il bordo sinistro del video.
# ^ ^ ^ Posiziona il testo al centro dello schermo.
F0='/usr/share/fonts/truetype/freefont/FreeSerif.ttf' # Imposta font di caratteri.
F1='h/10' # Imposta altezza font di caratteri pari ad 1/10 dell'immagine (in pixels).
#
T0="'Centro dello schermo.'" # Imposta il contenuto della riga di Testo da sovrascrivere al video.
T1='green' # Imposta il colore della riga di Testo.
T2='0.4' # Imposta l'opacità del colore della riga di Testo [0.0=Trasparente, 1.0=Coprente].
T3='red' # Imposta il colore dello sfondo della riga di Testo.
T4='0.2' # Imposta l'opacità dello sfondo della riga di Testo [0.0=Trasparente, 1.0=Coprente].
V1='P1040026.MP4' # Imposta nome del video da elaborare.
V2='videoOut.mp4' # Imposta nome del video elaborato.
#
C0='ffmpeg -i '"${V1}"' -vf drawtext="fontfile='"${F0}"': text='"${T0}"': x='"${Px}"': y='"${Py}"': fontsize='"${F1}"': fontcolor='"${T1}"'@'"${T2}"': box=1: boxcolor='"${T3}"'@'"${T4}"'" '"${V2}" # Elabora testo del comando.
echo $C0; eval $C0 # Mostra; ed esegue il contenuto di C0.
#
Grazie.
Postare l'output di un comando significa inserire nel post: la riga in cui si digita il comando, tutto l'output, e la riga in cui il prompt ricompare.
Hardware e Sistema Operativo di Sargonsei: http://sargonsei.altervista.org/hardwar ... r-fisso-2/
Comandi da tenere a portata di mano: http://sargonsei.altervista.org/655-2/
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2909
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: [Risolto] BASH: come far espandere le variabili?

Messaggio da rai »

Ciao
ho aggiunto un po' di apici... ora sembra funzionare...
Però in questo modo diventa un po' un incubo modificare uno script con quella sequenza di apici ma anche solo rileggerlo tra qualche tempo.
Io ti consiglio di proteggere tutta la stringa che assegni a C0 tra doppi apici all'inizio e alla fine: questi apici sono quelli che scompaiono dopo l'espansione della variabile $C0 da parte della shell
e tanto basterebbe per mostrare il contenuto di $C0 con echo; ma siccome si tratta di un comando da eseguire, il valore del filtro drawtext va a sua volta racchiuso tra doppi apici. Io farei così:

Codice: Seleziona tutto

C0="ffmpeg -i ${V1} -vf drawtext=\"fontfile=${F0}: text=${T0}: x=${Px}: y=${Py}: fontsize=${F1}: fontcolor=${T1}@${T2}: box=1: boxcolor=${T3}@${T4}\" ${V2}"

Se esiste il rischio di incontrare nomifile contenenti caratteri speciali basta proteggere nello stesso modo le variabili $V1 e $V2:

Codice: Seleziona tutto

C0="ffmpeg -i \"${V1}\" -vf drawtext=\"fontfile=${F0}: text=${T0}: x=${Px}: y=${Py}: fontsize=${F1}: fontcolor=${T1}@${T2}: box=1: boxcolor=${T3}@${T4}\" \"${V2}\""
Anche se fosse quest'ultimo il tuo caso, risparmieresti alcune dozzine di apici e mi pare che la stringa risulti molto più leggibile
:ciao:
Avatar utente
Sargonsei
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2614
Iscrizione: domenica 17 febbraio 2008, 13:56

Re: [Risolto] BASH: come far espandere le variabili?

Messaggio da Sargonsei »

Siete stati entrambi utilissimi, quindi ringrazio entrambi.
Postare l'output di un comando significa inserire nel post: la riga in cui si digita il comando, tutto l'output, e la riga in cui il prompt ricompare.
Hardware e Sistema Operativo di Sargonsei: http://sargonsei.altervista.org/hardwar ... r-fisso-2/
Comandi da tenere a portata di mano: http://sargonsei.altervista.org/655-2/
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 13 ospiti