Variabili predefinite e login shell [messaggio #36488] |
mer, 09 marzo 2011 21:14 |
Dalet Messaggi: 210 Registrato: novembre 2010 |
Senior Member |
|
|
Se faccio questo script pippo:
if [ "$1" = "--help" ] || [ "$1" = "" ]; then
echo; cat $0
else
echo
blablabla
echo
fi
e se poi do:
[~]dalet_$: . ./pippo
il $1 vuoto non lo prende, ma mi dice qcs circa il bell-style,
mantre me lo prende infallibilmente in tutti i moltissimi
script eseguibili.
Ho provato in tutti i modi a cambiare il test:
[ $1 = "" ]; [ $1="" ]; [ $1= ]... niente da fare.
Inoltre non mi prende il $0 che mi serve per vedere lo
script stesso con cat, ma questo l'ho 1/2 capito.
Son io che prendo Fischi per Fiaschi - come dice Max?
Ah.. e Nota Bene che finche' ero con la lenny mi andavano
tutti benissimo! (son parecchie utility che ho in ~/bin).
--
Saluti, Dalet
|
|
|
|
|
Re: Variabili predefinite e login shell [messaggio #36494 è una risposta a message #36488] |
gio, 10 marzo 2011 10:53 |
Lem Novantotto Messaggi: 166 Registrato: novembre 2010 |
Senior Member |
|
|
Dalet ha scritto:
Ok, io ci provo eh! Vado così un po' a naso, eh! Mi scusate per le
probabili cavolate? :)
> Se faccio questo script pippo:
>
> if [ "$1" = "--help" ] || [ "$1" = "" ]; then echo; cat $0
> else
> echo
> blablabla
> echo
> fi
>
> e se poi do:
> [~]dalet_$: . ./pippo
No, questa è (da)sh. Siccome così NON esegui uno script, ma leggi un
semplice file di testo e ne esegui i comandi, il file NON è $0, e i suoi
eventuali parametri di lancio NON sono $*.
Se fai . ./pippo, $0 è la shell. :)
Col modo del _punto_, in sh $0 è sh e in bash sarebbe bash. In bash,
però, a differenza che in sh, gli eventuali parametri di lancio di pippo
sarebbero comunque gestibili con $*.
In bash se ./pippo è:
if [[ $1 = "--help" ]] || [[ $1 = "" ]] ;
then echo questa è $0 $1 ;
else
echo blablabla ;
fi
allora . ./pippo --help ti dà:
lem@biggy:~$ . ./pippo --help
questa è bash --help
cat: bash: Nessun file o directory
In sh l'--help non verrebbe preso.
Su sh crea uno script, e poi eseguilo:
#! /bin/dash
if [ "$1" = "--help" ] || [ -z $1 ] ;
then echo questa è $0 $1 ;
cat $0 ;
else
echo blablabla ;
fi
--
Bye, Lem
Ceterum censeo ISLAM esse delendum
____________________________________________________________ ________
Non sprecare i cicli idle della tua CPU, né quelli della tua GPU.
http://boinc.berkeley.edu
http://www.worldcommunitygrid.org/index.jsp
http://boincsimap.org/ http://www.gpugrid.net/
|
|
|
Re: Variabili predefinite e login shell [messaggio #36495 è una risposta a message #36494] |
gio, 10 marzo 2011 12:59 |
Dalet Messaggi: 210 Registrato: novembre 2010 |
Senior Member |
|
|
Il 10-03-2011, Lem Novantotto dice:
>Dalet ha scritto:
>>Se faccio questo script pippo:
>>if [ "$1" = "--help" ] || [ "$1" = "" ]; then echo; cat $0
>>else
>>echo
>>blablabla
>>echo
>>fi
>>e se poi do:
>>[~]dalet_$: . ./pippo
>No, questa è (da)sh. Siccome così NON esegui uno script, ma leggi un
>semplice file di testo e ne esegui i comandi, il file NON è $0, e i suoi
>eventuali parametri di lancio NON sono $*.
>Se fai . ./pippo, $0 è la shell. :)
Si' questo di $0 l'avevo +o- capito, pero' il comando . e il
comando source, se la shell di login e' bash, sono la stessa
cosa.
In ogni caso credo che dash non c'entri nulla perche' viene
chiamato ad esempio se fai eseguire uno script eseguibile
che inizia cosi':
#!/bin/sh
invece che:
#!/bin/bash
infatti /bin/sh e' un link a /bin/dash, invece quando dai
il comando source fai eseguire uno script anche non
eseguibile dalla shell di login, cioe' quasi sempre bash
se uno non se n'e' scelta un'altra.
>Col modo del _punto_, in sh $0 è sh e in bash sarebbe bash. In bash,
>però, a differenza che in sh, gli eventuali parametri di lancio di pippo
>sarebbero comunque gestibili con $*.
>In bash se ./pippo è:
>if [[ $1 = "--help" ]] || [[ $1 = "" ]] ;
>then echo questa è $0 $1 ;
>else
>echo blablabla ;
>fi
>allora . ./pippo --help ti dà:
Eh.. e' un po' complicatino, il fatto centrale - se non ho
capito ancora male - e' che quando fai eseguire col . (cioe'
con la shell di login) a bash nessuno glielo dice di mettere
dei valori nelle variabili $1, $2.. perche' l'assenza d'una
coda di comando non e' la stessa cosa d'una coda nulla.
Anche il modo di Roberto (roberto) me lo prende solo quando
si vede che in memoria da qualche parte c'ha gia' i parametri
giusti dati in precedenza.. boh insomma se in pippo ho messo:
if [ "$1" = "" ]; then blablabla
allora se do:
.. ./pippo ""
e' tutto Ok perche' bash azzera $1, mentre se invece do:
.. ./pippo
non va, perche' bash in $1 non ci mette nulla e chi lo sa
cosa diavolo contiene gia', o meglio: credo che $1 abbia in
questo caso un significato differente, che ha qcs a che
vedere con bell-style, invece di quello di variabile.
--
Saluti, Dalet
|
|
|
|