slackware senza bash

Se avete problemi con l'installazione e la configurazione di Slackware postate qui. Non usate questo forum per argomenti generali... per quelli usate Gnu/Linux in genere.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Slackware, se l'argomento è generale usate il forum Gnu/Linux in genere.
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
ZeroUno
Staff
Staff
Messaggi: 5284
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

slackware senza bash

Messaggio 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?
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6545
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: slackware senza bash

Messaggio da targzeta »

Beh, a questo punto mi sembra una domanda retorica :D.

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà 

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

Re: slackware senza bash

Messaggio da conraid »

però $() è nello standard posix. E quel pezzo dice infatti che tenta di imitare la bourne shell storica, ma è fedele allo standard posix

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5284
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: slackware senza bash

Messaggio da ZeroUno »

Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

hashbang
Packager
Packager
Messaggi: 1980
Iscritto il: ven 4 giu 2010, 10:27
Nome Cognome: Luca De Pandis
Distribuzione: macOS Catalina
Località: Lecce / Bergamo / Milano
Contatta:

Re: slackware senza bash

Messaggio 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.

Rispondi