Pagina 1 di 1

slackware senza bash

Inviato: dom 10 gen 2016, 20:48
da ZeroUno
Tutti gli script di slackware puntano a /bin/sh il quale è un link a bash

If bash is invoked with the name sh, it tries to mimic the startup behavior of historical versions of sh as closely as possible,
while conforming to the POSIX standard as well.

Ma in verità non è vero.

Conosco bene la bourne shell perchè lavoro con server solaris in cui la bash ce la devi mettere a parte se la vuoi.

slackware:

Codice: Seleziona tutto

# /bin/sh
# echo $(echo ciao)
ciao
solaris

Codice: Seleziona tutto

$ /bin/sh
$ echo $(echo ciao)
syntax error: `(' unexpected
perchè in sh la sintassi $() non esiste.

Così come non esiste che funzionano le freccette per riprendere i comandi precedenti, che invece sh su slackware fa.

se compilo la bourne shell, secondo voi slackware boota?

Re: slackware senza bash

Inviato: lun 11 gen 2016, 1:03
da targzeta
Beh, a questo punto mi sembra una domanda retorica :D.

Emanuele

Re: slackware senza bash

Inviato: lun 11 gen 2016, 10:45
da conraid
però $() è nello standard posix. E quel pezzo dice infatti che tenta di imitare la bourne shell storica, ma è fedele allo standard posix

Re: slackware senza bash

Inviato: lun 11 gen 2016, 11:58
da ZeroUno

Re: slackware senza bash

Inviato: lun 11 gen 2016, 21:57
da hashbang
ZeroUno ha scritto:Ma in verità non è vero.
In realtà la modalità simil-POSIX di Bash lascia molto a desiderare.
Persino se digiti qualcosa come

Codice: Seleziona tutto

[[ -x $(which uname) ]] && echo -n "YES" || echo -n "NO"
per quella pseudo-sh va sempre bene, sebbene invece avrebbe dovuto dare errore o, nel caso del solo echo, stampare "-n YES"/"-n NO" anziché "YES"/"NO" privato della newline.

Se vuoi una Bash strictly-POSIX devi compilarla con --enable-strict-posix-default --enable-xpg-echo-default --enable-minimal-config.
In quel caso, stai pur tranquillo che avrai una vera shell full-POSIX/SUS. Questa è la configurazione usata dalla sh di Mac OS X, che è certificato come UNIX.
slackware:

Codice: Seleziona tutto

# /bin/sh
# echo $(echo ciao)
ciao
solaris

Codice: Seleziona tutto

$ /bin/sh
$ echo $(echo ciao)
syntax error: `(' unexpected
perchè in sh la sintassi $() non esiste.
$(comando) è POSIX, mentre `comando` è considerata una sintassi deprecata e che va usata solo in casi estremi e su sh non POSIX compatibili, come quella che stai usando tu su Solaris. Il problema in questo caso non è di Bash.

Tra l'altro, dato che hai detto che Bash la devi mettere a parte, che release è? Di sicuro non Solaris 11, visto che GNU Bash è la shell utente predefinita, mentre sh dovrebbe essere un symlink a ksh93.
Così come non esiste che funzionano le freccette per riprendere i comandi precedenti, che invece sh su slackware fa.
Questo in realtà non è strettamente collegato a POSIX, quanto al fatto che Bash in Slackware è compilata con il supporto a GNU readline.
se compilo la bourne shell, secondo voi slackware boota?
Non dovrebbe.
rc.S e rc.inet1 fanno uso di array, ed essi non sono definiti in POSIX.
Quei due script sono quelli che mi ricordo di più, ma probabilmente i Bashismi si troveranno anche in altre parti.

Se non sbaglio c'era un progetto su LQ fatto da un tizio che voleva rendere gli script di INIT full-POSIX, ma non ricordo bene.

Ma sinceramente, a che pro?
Io ho una Bash strictly-POSIX in $HOME/.local/bin, ma la uso davvero raramente.
Preferisco più fare uso di shellcheck, che ha tra l'altro una versione da usare in locale scritta in Haskell, e che risulta davvero comodo se hai bisogno di scrivere script perfettamente aderenti allo standard, o vuoi semplicemente dare un'occhiata alla sintassi prima ancora di eseguire il codice.