Esistono più programmi che implementano la lingua di /bin/sh. Su Ubuntu, /bin/shè dash, progettato per essere veloce, per utilizzare una piccola quantità di memoria e non supporta molto più del minimo previsto /bin/sh. Su RHEL, /bin/shè bash, che è più lento e utilizza più memoria ma ha più funzionalità. Una di queste funzionalità è l' ==operatore per la [sintassi condizionale. Dash supporta [, che è una funzione sh di base, ma non ha l' ==operatore che è un'estensione bash (e ksh e zsh).
Puoi cambiare il tuo sistema usando bash. Su Ubuntu, /bin/shc'è un collegamento simbolico a dash. Puoi invece renderlo un collegamento simbolico bash. Le versioni attuali di Debian e Ubuntu (e derivati) rendono questa opzione di installazione di dash. Per cambiarlo, corri
sudo dpkg-reconfigure dash
e rispondi "sì" per mantenere il trattino come /bin/sho "no" per passare a bash.
Puoi continuare con bash /bin/sh, ma renderà il tuo sistema un po 'più lento. È anche ipotizzabile che alcuni script di sistema siano incompatibili con bash, sebbene ciò sia improbabile poiché bash è principalmente un superset di dash.
Per le distribuzioni che non hanno un'interfaccia tra cui scegliere tra le implementazioni /bin/sh, ecco come passare a bash.
sudo ln -s bash /bin/sh.bash
sudo mv /bin/sh.bash /bin/sh
Tieni un terminale aperto e verifica che dopo puoi ancora eseguire alcuni shscript. Se confondi questo comando, renderai il tuo sistema inutilizzabile. (A proposito, il motivo per cui ho usato i comandi multipli sopra piuttosto che quelli semplici sudo ln -sf bash /bin/shè che ln -sfnon è atomico. Nel caso in cui è improbabile che il tuo computer si sia arrestato in modo anomalo durante questa operazione, dovrai ripristinarlo da un supporto di ripristino. Al contrario, mvè atomico.)
Per ripristinare il trattino come /bin/sh:
sudo ln -s dash /bin/sh.dash
sudo mv /bin/sh.dash /bin/sh
Nota che se sh è /bin/bashdi default nella tua distribuzione, il passaggio a dash potrebbe causare errori negli script, poiché bash ha molte più funzioni rispetto a dash. Gli script Bash dovrebbero iniziare con #!/bin/bash, e gli script che iniziano con #!/bin/shnon dovrebbero usare funzionalità specifiche di bash, ma le distribuzioni fornite con bash /bin/shpotrebbero utilizzare funzionalità specifiche di bash in #!/bin/shscript specifici per quella distribuzione (va bene finché non ci si aspetta che gli utenti può passare al trattino come /bin/she non ci sono aspettative che questi script funzionino su un'altra distribuzione).
==che dovrebbe essere=. Quello e che le espansioni variabili dovrebbero essere racchiuse tra virgolette.