Pagina 1 di 2

bash

Inviato: domenica 2 marzo 2008, 20:51
da simoblu88
salve ragazzi è la primissima esperienza con bash anche se conosco un po di c++ ma non so se puo essermi utile...vi volevo chiedere per creare uno script lo posso fare con editor di testo? se si come devo salvare il file con quale estensione? dove lo devo salvare ? e per avviare lo script da terminale che comandi devo dare (tipo chmod 555 nomefile,o basch nomefile)? grazie

Re: bash

Inviato: domenica 2 marzo 2008, 21:45
da SAKO
Ciao, per scrivere il tuo script puoi usare vi, per usarlo digita vi nel terminale.
Qui potrai scrivere il tuo programma.con questo comando gli dai i permessi "chmod 700 nomeProgramma.sh"
e con questo lo esegui "./nomeProgramma.sh"

Re: bash

Inviato: domenica 2 marzo 2008, 23:27
da Volans
Qualsiasi editor di testo va bene per scrivere uno script bash sh ;)
Il permesso che serve per eseguirlo è quello di esecuzione (la "x" quando visualizzi i permessi a lettere) e deve averlo chi dovrà poi eseguire lo script (utente, gruppo, tutti).

In generale simoblu88 ti consiglio di consultare queste due guide:
Guida Linux: Programmazione della shell 11.14
Guida avanzata di scripting Bash

Re: bash

Inviato: lunedì 3 marzo 2008, 10:10
da gaspa
SAKO ha scritto: Qui potrai scrivere il tuo programma.con questo comando gli dai i permessi "chmod 700 nomeProgramma.sh"
e con questo lo esegui "./nomeProgramma.sh
Speficico che in linux l'estensione del programma e' soltanto una convenzione.
Di solito per i binari viene guardato il "magic number"(i primi byte del file) che ne descrivono il tipo... per gli script viene invece utilizzato "l'hash bang", che specifica quale interprete usare

In ogni caso e' buona prassi per evitare di incasinarsi i propri file, ma piu' per noi umani che per la macchina...

Re: bash

Inviato: lunedì 3 marzo 2008, 12:50
da simoblu88
ma se senza dargli i permessi chmod 777......do bash nomefile non è la stessa cosa?

Re: bash

Inviato: lunedì 3 marzo 2008, 12:52
da Guiodic
simoblu88 ha scritto: ma se senza dargli i permessi chmod 777......do bash nomefile non è la stessa cosa?
sh nomefile è la sintassi più corretta.

Re: bash

Inviato: lunedì 3 marzo 2008, 13:19
da Volans
Il permesso di esecuzione devi daglielo comunque:

Codice: Seleziona tutto

chmod +x nomefile
oppure da GUI tasto destro sul file e poi proprietà -> tab permessi e selezioni consentire esecuzione del file come programma.

Re: bash

Inviato: lunedì 3 marzo 2008, 14:38
da gaspa
Volans ha scritto: Il permesso di esecuzione devi daglielo comunque:
falso... se lo chiami da bash, sh, o con "." non importa il permesso di esecuzione

Codice: Seleziona tutto

[515]gaspa@saturnino:bin$ ls -l ciao.sh 
-rw-r--r-- 1 gaspa gaspa 22 2008-03-03 14:34 ciao.sh
[516]gaspa@saturnino:bin$ sh ciao.sh 
ciao
[517]gaspa@saturnino:bin$ . ciao.sh 
ciao

Re: bash

Inviato: lunedì 3 marzo 2008, 14:56
da Volans
gaspa hai ragione se lo chiami con sh specificato non serve il permesso di esecuzione, ma per chiamarlo con ./nomefile si.

Con punto non ho capito cosa fai dato che a me chiude la shell ;)

Re: bash

Inviato: lunedì 3 marzo 2008, 15:16
da gaspa
Volans ha scritto: gaspa hai ragione se lo chiami con sh specificato non serve il permesso di esecuzione, ma per chiamarlo con ./nomefile si.
?? anche qui non mi sembra, eseguendolo con sh, dovrebbe andare a gestire l'hashbang.. (e' piu' o meno come chiamare un perl/python con il proprio interprete, quindi non capisco perche' dovrebbe essere necessario il '.sh'
$ mv ciao.sh ciao
[525]gaspa@saturnino:bin$ sh ciao
ciao
Con punto non ho capito cosa fai dato che a me chiude la shell ;)
il punto serve per "valutare" uno script. La differenza tra il comando sh e il punto e' che nel primo caso esegue un'altra shell, mentre nel secondo no.
Quindi se c'e` un qualche errore (che mi pare capire di permessi, nel tuo caso) nel secondo caso si chiude la shell che stai usando.

bye

Re: bash

Inviato: lunedì 3 marzo 2008, 15:32
da Volans
Non ci siamo capiti ma dicevamo la stessa cosa prima gaspa... per "sh specificato" intendevo come comando sh nomefile non come estensione. ;)

Se do . nomefile mi chiude la shell dato che lo scritp è un echo "ciao" non ci sono sicuramente errori... quindi penso dipenda dal fatto che non ha il permesso di esecuzione. :)

Re: bash

Inviato: lunedì 3 marzo 2008, 15:52
da gaspa
Volans ha scritto: Non ci siamo capiti ma dicevamo la stessa cosa prima gaspa... per "sh specificato" intendevo come comando sh nomefile non come estensione. ;)
ah, ok, scusami. ;D
Se do . nomefile mi chiude la shell dato che lo scritp è un echo "ciao" non ci sono sicuramente errori... quindi penso dipenda dal fatto che non ha il permesso di esecuzione. :)
e questo e' strano, perche' io non li ho, i permessi di esecuzione. E mi sembra verosimile che non servano, visto che il comando significa 'interpreta il seguente script bash'
$ source ciao.sh
ti fa la stessa cosa??

Re: bash

Inviato: lunedì 3 marzo 2008, 16:48
da Volans
Strane cose succedono... :)

Se faccio . prova.sh da root me lo esegue senza problemi, . prova non me lo esegue e chiude la shell. Da utente mi chiude la shell in entrambi i casi.

Ho provato con un strace ma in realtà l'output è praticamente lo stesso (anche se c'è una riga con permission denied). Suggerimenti per risolvere l'arcano? :)

Re: bash

Inviato: lunedì 3 marzo 2008, 17:04
da gaspa
Volans ha scritto: Strane cose succedono... :)

Se faccio . prova.sh da root me lo esegue senza problemi, . prova non me lo esegue e chiude la shell. Da utente mi chiude la shell in entrambi i casi.

Ho provato con un strace ma in realtà l'output è praticamente lo stesso (anche se c'è una riga con permission denied). Suggerimenti per risolvere l'arcano? :)
boh???
prova ad aprire una shell, cioe',
$ bash
$ .  prova

cosi' dovresti vedere l'errore. Che comunque, sara' probailmente permission denied...
Non so cosa potremmo avere di diverso... $SHELL ?? i permessi della directory?? (non credo... pero'...)
Hai controllato di avere prova nel path? altrimenti devi dire ./prova
So che sono robe banali, ma sinceramente non so dove pescare.

Re: bash

Inviato: lunedì 3 marzo 2008, 18:15
da Volans
E se ti dico che ora funziona... :D mah i misteri dell'informatica... ora va in ogni combinazione! :)

Re: bash

Inviato: martedì 4 marzo 2008, 0:49
da urka58
Il punto è un comando TCL ed è equivalente a source.
Se in uno script my_script inserisco
. (source) my_source_file
le variabili definite in my_source_file vengono impostate in my_script e i comandi in my_source_file vengono eseguiti nella shell corrente.
source restituisce l'exit status dell'ultimo comando del file che viene passato come oggetto. (in assenza di un comando return)
Ciao

Re: bash

Inviato: martedì 4 marzo 2008, 10:12
da gaspa
Volans ha scritto: E se ti dico che ora funziona... :D mah i misteri dell'informatica... ora va in ogni combinazione! :)
ROTFL...  (rotfl)
forse avevi qualche variabile settata strana. boh.

urka58 ha scritto: Il punto è un comando TCL ed è equivalente a source.
mah, stiamo parlando di bash... forse tcl ha gli stessi comandi... ma non stiamo parlando di tcl...
comunque, da quel che dici, si'... mi pare che dovrebbero funzionare come dici tu.

Re: bash

Inviato: martedì 4 marzo 2008, 18:42
da urka58
Non è che lo dico io ...
Dalla pagina man di bash (paragrafo built in):
. (a period)

              . filename [arguments]

    Read and execute commands from the filename argument in the current shell context. If filename does not contain a slash, the PATH variable is used to find filename. When Bash is not in posix mode, the current directory is searched if filename is not found in $PATH. If any arguments are supplied, they become the positional parameters when filename is executed. Otherwise the positional parameters are unchanged. The return status is the exit status of the last command executed, or zero if no commands are executed. If filename is not found, or cannot be read, the return status is non-zero. This builtin is equivalent to source.
oppure più in dettaglio la pagina man di source.
Ciao

Re: bash

Inviato: mercoledì 5 marzo 2008, 10:42
da gaspa
urka58 ha scritto: Non è che lo dico io ...
Dalla pagina man di bash (paragrafo built in):
forse non mi ero spiegato, ma non discutevo questo, bensi' il fatto che fosse un "comando TCL".
Cmq, stiamo parlando di nulla, dai. :)

Re: bash

Inviato: mercoledì 5 marzo 2008, 23:53
da urka58
Cmq, stiamo parlando di nulla, dai.
stiamo parlando di un comando shell (che è anche un comando tcl), non mi pare che siano volati insulti, quindi non capisco la tua esortazione a terminare la discussione..., comunque, se vuoi così, va bene.
Ciao