Volevo sapere se gli script scritti per dash, ash e sh sono compatibili al 100%?
Sono presenti funzionalità aggiuntive a trattino o cenere o cambio di sintassi?
Da quello che ho sentito, ash è un diretto discendente di sh.
Commenti
Risposta
La risposta breve è no, loro “non è compatibile al 100%.
Ma la maggior parte delle shell è abbastanza vicina a quella di base, quindi solo raramente ti imbatteresti in incongruenze. In effetti, la maggior parte delle shell differisce non molto dalla sintassi aggiunta, ma da alcune funzionalità extra come il completamento con tabulazione e simili.
Inoltre, dash
è una specie di discendente di ash
— o port da BSD a Linux, per essere precisi. E tutti dovrebbero essere discendenti o diverse implementazioni di sh
. Infatti, sh
è sulla maggior parte dei sistemi solo un collegamento simbolico a bash
, dash
o qualcosaltro. Ciò che conta è la conformità POSIX — e quando scrivi script secondo gli standard, non incorrerai in problemi.
La differenza tra queste shell è nelle ottimizzazioni e prestazioni. Sono meno ricche di funzionalità di bash
, ma sono shell completamente legittime. Bash è ricco di funzionalità per il lavoro interattivo, ma utilizza più memoria, ad esempio.
Commenti
- Ma per lutilizzo degli script, sono compatibili?
- E riguardo alla conformità POSIX, anche se seguo quello standard, se uno script è scritto per Bash, non penso che funzionerà su sh o sui suoi discendenti
- Dovrebbero essere compatibili tra di loro se ' non stai utilizzando alcune funzioni oscure. Ma se usi lo script bash, potresti incorrere in più problemi.
- non ho mai inteso usare bash con sh o ash o dash. Quali sono queste funzionalità oscure?
- molte delle nuove funzionalità di bash ' sono aggiunte a POSIX, quindi è sempre più probabile che scriverai codice non portabile se ' li stai utilizzando. IIRC anche il costrutto [[]] non è in sh. Inoltre, fai attenzione, che se ' non stai scrivendo uno script di shell puro, entrano in gioco anche le differenze negli strumenti (versioni diverse di sed, grep, awk …).
Risposta
Va detto che su alcuni sistemi, in particolare Debian, / bin / ash non è disponibile:
$ type ash dash bash: type: ash: not found dash is /bin/dash
Commenti
- Potrebbero avere busybox ash.
- Detto questo, ci sono molti sistemi che non ' hanno
bash
.
man ash
checkbashisms
per verificare che il tuo script sia conforme a POSIX.