Gli script dash, ash e sh sono compatibili al 100%?

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

  • ash è una forma di bash con striping
  • Fonte? Non ho visto nulla che dica che ash è correlato a bash
  • Perché ' le persone non dovrebbero semplicemente inviare patch a bash invece di creare tutti i tipi di shell, questo mi buffa tutto il tempo. Se vuoi davvero saperlo, leggi il manuale, ad es. man ash
  • Corretto, ' non discende da bash. Sarebbe più preciso dire che ' discende da sh (loriginale Bourne shell), ma che ' non è nemmeno completamente corretto .
  • Puoi utilizzare lutilità checkbashisms per verificare che il tuo script sia conforme a POSIX.

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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *