Dubbi Bash

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
RedSkull92
Linux 3.x
Linux 3.x
Messaggi: 567
Iscritto il: mar 21 apr 2009, 17:25
Slackware: 64bit -current
Kernel: 3.5.4
Desktop: FluxBox
Località: Palermo
Contatta:

Dubbi Bash

Messaggio da RedSkull92 »

Sto leggendo qualche guida per imparare il bash.
Ho visto un pò di Slackbuild e ho visto alcune cose che mi hanno creato dei dubbi.
Eccoli quì:

Codice: Seleziona tutto

CWD=`pwd`
TMP=${TMP:-/tmp/txz}
ARCH=${ARCH:-i486}
Non poteva essere così ?

Codice: Seleziona tutto

CWD=${pwd}
TMP=/tmp/txz
ARCH=i486
cosa cambia tra le 2 versioni ?
Cosa è meglio usare ?


Poi non ho capito l'utilità del comando strip.
Poi in molti sorgenti ho visto "requiredbuilder" ma io sulla mia slack 13 non trovo questo comando, a che serve ?
Grazie per le eventuali risposte !

Avatar utente
ulisse89
Packager
Packager
Messaggi: 643
Iscritto il: sab 17 gen 2009, 12:53
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce
Località: Bologna

Re: Dubbi Bash

Messaggio da ulisse89 »

Io ti posso rispondere solo a un paio di domande.
Requiredbuilder è un tool che dobbiamo installare noi pacchettizzatori ( e che puoi trovare anche te qui http://stabellini.net/requiredbuilder.html ), che serve a calcolare le dipendenze di un pacchetto, prima di creare il package. Fa uso di ldd per calcolare le dipendenze, è molto utile anche se non è affidabile al 100%.

Strip è un comando che elimina i simboli di debug dai file binari (simboli che alla gente comune non servono), rendendoli di fatto più leggeri.

Avatar utente
michelino
Staff
Staff
Messaggi: 871
Iscritto il: gio 21 dic 2006, 11:59
Nome Cognome: Michelino Chionchio
Slackware: -current
Kernel: 2.6.29.6
Desktop: kde (current)
Località: Foggia

Re: Dubbi Bash

Messaggio da michelino »

RedSkull92 ha scritto:Sto leggendo qualche guida per imparare il bash.

Codice: Seleziona tutto

CWD=`pwd`
TMP=${TMP:-/tmp/txz}
ARCH=${ARCH:-i486}
Non poteva essere così ?

Codice: Seleziona tutto

CWD=${pwd}
TMP=/tmp/txz
ARCH=i486

Codice: Seleziona tutto

CWD=`pwd`
e

Codice: Seleziona tutto

CWD=$(pwd)

( e non CWD=${pwd}) sono due modi per dire la stessa cosa, anche se ci sono problemi di compatibilità tra le diverse tipologie di shell e tra versioni diverse di shell dello stesso tipo

Codice: Seleziona tutto

TMP=${TMP:-/tmp/txz}
così come l'altro, significano che nel caso in cui la variabile TMP non sia impostata (ad esempio come variabile d'ambiente) TMP=/tmp/tgz, altrimenti TMP=variabile_già_impostata
mentre

Codice: Seleziona tutto

TMP=/tmp/tgz
imposta senz'altro la variabile, anche se c'è una variabile d'ambiente.

....o almeno io ricordo così :-))))

Avatar utente
RedSkull92
Linux 3.x
Linux 3.x
Messaggi: 567
Iscritto il: mar 21 apr 2009, 17:25
Slackware: 64bit -current
Kernel: 3.5.4
Desktop: FluxBox
Località: Palermo
Contatta:

Re: Dubbi Bash

Messaggio da RedSkull92 »

ok perfetto.
Uhm come mai mettere $(pwd) e non ${pwd} ?
cosa cambia ?
nella guida ho letto che () danno vita a subshell mentre {} no, è forse per questo ?

Avatar utente
michelino
Staff
Staff
Messaggi: 871
Iscritto il: gio 21 dic 2006, 11:59
Nome Cognome: Michelino Chionchio
Slackware: -current
Kernel: 2.6.29.6
Desktop: kde (current)
Località: Foggia

Re: Dubbi Bash

Messaggio da michelino »

Sinceramente non conosco la "command substitution" con la sintassi

Codice: Seleziona tutto

${command}
ma non sono un guru del bash scripting....aspetto risposte da persone più esperte; fermo restando che il codice scritto tra "( )" viene di certo eseguito in subshell.

Avatar utente
ulisse89
Packager
Packager
Messaggi: 643
Iscritto il: sab 17 gen 2009, 12:53
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce
Località: Bologna

Re: Dubbi Bash

Messaggio da ulisse89 »

$(pwd) è diverso da ${pwd}. Mentre il primo assegna alla variabile l'output di pwd ( uguale a CWD=`pwd` ), il secondo non ci mette niente.
Non ti so spiegare cosa faccia di preciso la forma tra parentensi graffe, ma ti posso dire che non la puoi usare per assegnare l'output dei comandi.

Avatar utente
danix
Staff
Staff
Messaggi: 3287
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 5.4.43 x86_64
Desktop: i3
Località: Siderno (RC)
Contatta:

Re: Dubbi Bash

Messaggio da danix »

mettendo il comando tra parentesi tonde stai dicendo di eseguire il comando e di dare il risultato del comando come valore alla variabile, quindi:

Codice: Seleziona tutto

CWD=$(pwd)
eseguirà il comando pwd e darà il risultato come valore della variabile $CWD...

mettendolo tra parentesi graffe invece non eseguirai il comando, quindi il valore della variabile sarà quello contenuto tra parentesi, nel nostro esempio:

Codice: Seleziona tutto

CWD=${pwd}
la variabile $CWD avrà valore "pwd" che non è il massimo... ;)
danix
myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
ulisse89
Packager
Packager
Messaggi: 643
Iscritto il: sab 17 gen 2009, 12:53
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce
Località: Bologna

Re: Dubbi Bash

Messaggio da ulisse89 »

Danix, non credo neanche che assegni la stringa "pwd". Ho fatto una prova veloce dalla shell e CWD risulta vuota.

Avatar utente
danix
Staff
Staff
Messaggi: 3287
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 5.4.43 x86_64
Desktop: i3
Località: Siderno (RC)
Contatta:

Re: Dubbi Bash

Messaggio da danix »

hai ragione... my bad...
danix
myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Dubbi Bash

Messaggio da conraid »

${pwd} è uguale a $pwd, si utilizza nei casi ambigui, per esempio con $pwd$pippo cosa vogliamo intendere?
$pwd e $pippo attaccate o la variabile pwd$pippo?
e se prendiamo un risultato da shell, e tanti atri casi?
allora facciamo ${pwd}${pippo} o ${pwd$pippo}

nei casi in cui la variabile prende i valori da un comando, è utile anche usare le graffe "$pwd", in modo da comprendere gli "spazi"

Avatar utente
RedSkull92
Linux 3.x
Linux 3.x
Messaggi: 567
Iscritto il: mar 21 apr 2009, 17:25
Slackware: 64bit -current
Kernel: 3.5.4
Desktop: FluxBox
Località: Palermo
Contatta:

Re: Dubbi Bash

Messaggio da RedSkull92 »

ah ok gentilissimi.
Se avrò altre domande posterò quì così non apro millemila topic .

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: Dubbi Bash

Messaggio da Mario Vanoni »

conraid ha scritto:${pwd} è uguale a $pwd, si utilizza nei casi ambigui, per esempio con $pwd$pippo cosa vogliamo intendere?
$pwd e $pippo attaccate o la variabile pwd$pippo?
e se prendiamo un risultato da shell, e tanti atri casi?
allora facciamo ${pwd}${pippo} o ${pwd$pippo}

nei casi in cui la variabile prende i valori da un comando, è utile anche usare le graffe "$pwd", in modo da comprendere gli "spazi"
Esatto, ma esistono casi ambigui.
Metti che vuoi copiare il contenuto di pippo a pippo con estensione 1:
cp $pippo $pippo1 non funziona
cp $pippo ${pippo}1 funziona
Vecchia regola della Bourne Shell:
mettere _sempre_ le graffe, non si avra` _mai_ ambiguita`/problemi.

Rispondi