Newsgroup: it.comp.os.linux.iniziare
Titolo: percorso reale del file bash

Da un file bash, voglio lanciare un altro file bash, che sta nella 
directory superiore.
 
Quindi ho creato il file /home/script/sub/test.sh:
 
#!/bin/bash
../sopra.sh
# altre operazioni...
 
Se quindi lancio il file bash direttamente dalla sua cartella, tutto 
funziona.
Se invece lo lancio tramite un collegamento creato appositamente sulla 
scrivania, non funziona:
 
../sopra.sh: File o directory non esistente
 
Naturalmente questo succede perchï¿œ viene presa in considerazione la 
directory superiore della Scrivania (/home) e non '/home/script'.
 
Si puï¿œ aggirare il problema?

 Si può aggirare il problema?
 
https://www.google.com/search?q=bash+get+script+path
 

 # altre operazioni...
 
Non puoi procedere così.
Prima di tutto gli eseguibile devono stare nella directory bin, 
e le librerie nella directory lib, quindi come prima cosa ti crei 
le directory ~/bin e ~/lib, poi aggiungi queste a $PATH e sposti
tutti i tuoi programmi personali lì. Magari anche metti i file di
configurazione in ~/etc (anche se i file di configurazione 
personali possono stare benissimo nella tua $HOME.
 
Se poi hai ancora necessità di accedere ad un file in un'altra 
directory ti crei un file di configurazione minimale dove inserire
questa directory. E per carità usa i /pathname/ assoluti.
 
PS Non vale la pena creare una directory ~/script, è ridondante.
 
 
 
 

Si può aggirare il problema?
 
Si', basta metterci il PATH assoluto, cosi':
 
------------------
#!/bin/bash
                   <=== riga in bianco e' d'uso
/home/script/sopra.sh
# altre operazioni...
--------------------------
 
-- 
Tanti saluti
 

 questa directory. E per carità usa i/pathname/  assoluti.
 
Questo discorso della configurazione non mi è chiaro, un esempio?

 Questo discorso della configurazione non mi è chiaro, un esempio?
 
Ti faccio un esempio, se tu installi mplayer  e lanci 
 
mplayer film.avi
 
Il film viene riprodotto da mplayer con le sue impostazioni di default.
Se vuoi sovrascrivere queste impostazioni, ogni volta che lanci mplayer, 
senza doverle esplicitare ogni volta come argomenti 
es : mplayer -fs film.avi per avere la riproduziuone in fullscreen 
 
devi creare un file di config per mplayer dove scrivi
 
fs=yes
 
e così via per ogni altra impostazione.


 
Così ogni volta che voglio spostare la dir. principale (/home/script) 
devo mettere mano al path.
 

 e così via per ogni altra impostazione.
 
E nell'ambito degli script bash dove sta il parallelismo?
 
Forse vuoi dire che invece di
 
~/lib/a/b/c/d.sh
 
è meglio fare
 
~/etc/config.sh
$samplePath/d.sh
 
???
 
Naturalmente in ~/etc/config.sh ci metto
samplePath="~/lib/a/b/c"

Addi' 15 apr 2013, david stella scrive:

Ma perche' non fai come fanno tutti?
1) Crei la directory bin nella tua home-directory;
2) La aggiungi nel path con questa riga alla fine di ~/.profile:
export PATH="$PATH:/home/magen/bin";
3) sposti sopra.sh in /home/magen/bin/.
 
N.B. pero' che il terminale non lo so se vede .profile, forse devi
aggiungerlo anche da qualche altra parte -- dipende dalla distro e/o
dal tipo di terminale.
 
-- 
Tanti saluti
 

 Naturalmente in ~/etc/config.sh ci metto samplePath="~/lib/a/b/c"
 
naturalmente


 
Perchè, è sbagliato?
Mi avevi appena consigliato di usare questo sistema o no?
"scrivere direttamente": cosa indendi dire?

 dal tipo di terminale.
 
Giusto per chiarezza dipende dalla shell non dall'emulatore di terminale.
 
Nel caso di bash il fatto che venga letto un file di configurazione (tra 
cui .profile) piuttosto che un altro dipende dal tipo di shell che si 
sta lanciando.
Altre shell possono ignorare del tutto il file .profile .

 export PATH="$PATH:/home/magen/bin";
 
L'ho fatto e mi andato tutto in tilt; meno male che avevo una live di 
mint e sono riuscito a ripristinare.
Ma poi a cosa serve impostare questo PATH?
E non è la prima volta che in questo ng si danno suggerimenti incauti :(

Addi' 15 apr 2013, david stella scrive:

L'unica cosa che non puoi dirmi e' "incauto", perche' quando do
suggerimenti sono certo al 100% che non possono nuocere.
Hai fatto pasticci tu, copiando male qualcosa. Lo saprai tu.
 
N.B. che il "magen" e' del tutto errato, ma e' totalmente innocuo, non
era che una battuta: david stella -> Stella di Davide -> Magen (in
ebraico).
 
-- 
Tanti saluti
 

 E non è la prima volta che in questo ng si danno suggerimenti incauti :(
 
Oppure semplicemente non sei abbastanza attento da capire quello che stai 
facendo e, di conseguenza, dai la colpa dei tuoi errori agli altri
 
Enrico

 Quindi ad esempio mi dovrei creare ...
 
Senti trolletto, non sai cosa è l'espansione della tilde e vuoi fare
uno script bash, non sai le basi della programmazione e vuoi 
questionare con arroganza, e non sapendo neanche cosa è $PATH
ti lamenti per errori commessi da te.
 
Vedi di andare da un'altra parte.
 

 nel tuo pc che ti serve a rippare un cd audio, per fare un esempio.
 
Neanche per quello perchè userai quello script due o tre volte e poi
o fai uno script come si deve oppure trovi uno /front/ /end/ che fa le 
stesse cose del tuo script in maniera migliore. E magari quel /front/
/end/ uguale uguale al tuo solo programmato meglio.
 
Tanto vale programmare bene fin dal principio
 
 


Allora tra poco riproverò a fare la stessa cosa con un altro computer, 
però intanto cercate di rispondere alle domande che ho fatto:
 
A cosa serve impostare questo PATH?
Serve il ';' finale?
 
Se si hanno chiare certe cose apparentemente elementari, forse si può 
evitare qualche pasticcio...


 
Ho aggiunto:
 
export PATH="$PATH:/home/mionome/bin";
 
Ma il ";" finale serve?


Senti grandissimo stronzo, ti ricordo che siamo su it.comp.os.linux.iniziare

Il 15/04/2013 22:00, Yoda ha scritto:
 > L'unica cosa che non puoi dirmi e' "incauto", perche' quando do
 > suggerimenti sono certo al 100% che non possono nuocere.
 
Però dopo riavviato mi si è stranamente attivata la finestra di login di 
kde.
Inoltre provando a loggarmi: password errata.
Ho dovuto vincere il panico immediatamente, andando a cercare una 
chiavetta su cui avevo messo mint, fare il boot da li, e ripristinare il 
file allo stato precedente.
 
 > Hai fatto pasticci tu, copiando male qualcosa. Lo saprai tu.
 >
 
Ho aggiunto semplicemente:


 ... ti ricordo che siamo su it.comp.os.linux.iniziare
 
La buona educazione non è facoltativa
 
http://www.catb.org/esr/faqs/smart-questions.html
 
 
ftp://ftp.rfc-editor.org/in-notes/rfc1855.txt
 
 
www.arcetri.astro.it/CC/rfc1855_it.html
 
 
 

 La buona educazione non è facoltativa
 
 
Guardati la tua, trollone di merda.
 

 direttamente": cosa indendi dire?
 
Non hai riportato le due righe successive, dove dico *come* farlo.
Eseguendo il file come script bash, invece che includerne il contenuto 
tramite . , non va bene, devi studiarti lo scope delle variabili in bash.
 
http://www.tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_02.html
 
http://ss64.com/bash/source.html
 
 
 

 3) sposti sopra.sh in /home/magen/bin/.
 
Non so se su altri sistemi sia cosi`; su Debian testing nel file
~/.profile
leggo:
 
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi
 
quindi basta creare la directory bin nella home
spostare sopra.sh in ~/bin/
e se si vuole usarlo subito da terminale dare:
$ . .profile
 
 
 
 

Altre shell possono ignorare del tutto il file .profile .
 
Il fatto e' che magari ~/.profile neppure ce l'ha, se non ricordo male
un tempo c'era ~/.bash_profile che ha la precedenza e addirittura
impedisce la lettura di ~/.profile anche se c'e' (parlo della Debian).
L'ordine in ogni caso e': .bash_profile .bash_login .profile, quando ne
trova uno gli altri non li cerca piu'.
 
Ma sui terminali ne so pochissimo, non li uso, so che la Konsole di KDE
ho dovuto fare i salti per renderla appena appena decente per le poche
volte che la uso, ma non legge l' ~/.profile perche' non e' la shell di
login, legge invece /etc/bash.bashrc e poi ~/.bashrc. Percio' sui
terminali ho tergiversato, nel caso avrebbe potuto chiedere nuovamente.
 
-- 
Tanti saluti
 

Addi' 16 apr 2013, david stella scrive:

E' indifferente metterci o non metterci, sia il punto e virgola, sia le
virgolette, era una riga a prova di niubi' ma hai pasticciato lo stesso.
 
-- 
Tanti saluti
 

$ . .profile
 
Il fatto e' anche che veramente la bash del terminale dubito che legga
.profile, nella konsole di KDE legge solo /etc/bash.bashrc e ~/.bashrc.
In ogni caso il discorso per l'OP si allunga troppo, perche' non e' da
terminale ma da un'icona del desktop - alla windows - che deve venir
chiamato, e io non ho la minima idea di quale path seguano le icone.
 
-- 
Tanti saluti
 

chiaro a cosa serva esportarlo... dovro' indagare.
 
Adesso lo so: lo esporta alle non-login shell, infatti nel terminale
konsole il path risulta quello che figura in .profile per la shell di
login e non quello di .bashrc per quelle non-login.
Comunque adesso la tolgo la direttiva export, voglio seguire la deb in
tutto.
 
-- 
Tanti saluti
 


 
Si, ora è chiaro.
Però se voglio passare solo determinati parametri ad una libreria, 
preferirei sempre eseguirla in una shell a parte::
 
~/lib/abc.sh 1 2 3
 
piuttosto che
 
x=1
y=2
z=3
. ~/lib/abc.sh
 
Non è più prolisso e meno pratico?

 virgolette, era una riga a prova di niubi' ma hai pasticciato lo stesso.
 
Guarda che non ho pasticciato niente, evidentemente ï¿œ colpa del kde 
installato sull'altro pc, che ha combinato qualche casino.
 

 ..profile, nella konsole di KDE legge solo /etc/bash.bashrc e ~/.bashrc.
 
Da gnome-terminal lo legge.
 
Sempre nel commento in testa al file c'e` scritto:
 
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
 
ed io in effetti non ho ne` ~/.bash_profile ne` ~/.bash_login
 
 

 installato sull'altro pc, che ha combinato qualche casino.
 
No mamma, non ho infilato il computer del babbo nella lavastoviglie,
stavamo giocando a nascondino e si è nascosto lì da solo.
 
 
 

Addì  martedì 16 aprile 2013 18:19 mallin.shetland scrisse:

E poi il gatto ha avviato la lavastoviglie.


BI A ACCA

 Non è più prolisso e meno pratico?
 
Ancora ti ostini a non capire. Ti fermi all'apparenza e non vai nel contesto
delle cose.
 
Avere dei parametri cablati nel tuo codice rene il tuo codice praticamente 
inusabile, qualunque linguaggio di programmazione tu usi. 
 
Quindi questi esempi  sono assolutamente inutili se non capisci prima di 
cosa stiamo parlando.
 


 
Amico, sono all'inizio, ma la volontà c'è, quindi...

 evitare qualche pasticcio...
 
Crea un secondo utente e usa quello per
fare queste prove.
In caso di pasticci puoi sempre tornare
al primo utente e sistemare le cose.
 
*NON* usare "root" per fare esperimenti.
 
bye,
 
-- 
 
piergiorgio

 [...]  ma la volontà c'è, quindi...
 
Dove? Non la vedo! Dove sta la  tua volontà?
 
Creare una directory e cambiare il $PATH è alla portata di
tutti; non ci sei riuscito, non fa niente. Tu stesso non sai 
cosa hai combinato, come possiamo saperlo noi? 
Come possiamo sapere cosa non funziona se *TU* non 
posti cosa hai fatto?
Posta tutti i dettagli, i comandi che hai dato, e gli errori che 
hai avuto, magari anche i file che hai cambiato e lo script 
che non funziona, e forse capirai da solo dove hai sbagliiato.
 
Hai letto lo scritto di Raymond vero?
 


i give up

 che non funziona, e forse capirai da solo dove hai sbagliiato.
 
Aridalle :-b
 

 *NON*  usare "root" per fare esperimenti.
 
Certo che no ;)