Dash, ash e sh script sono compatibili al 100%?


16

Volevo sapere se gli script scritti per dash, ash e sh sono compatibili al 100%?

Ci sono funzioni aggiuntive da trattenere o rilasciare o cambiare la sintassi?

Da quello che ho sentito, la cenere è un discendente diretto di sh.


ash è una forma a strisce di bash
Joe

4
Fonte? Non ho visto nulla che dicesse che la cenere è legata a bash
user1115057

Perché la gente non dovrebbe semplicemente inviare patch per bash invece di creare tutti i tipi di shell, il che mi rende sempre più buffo. Se vuoi davvero saperlo, leggi il manuale, ad esman ash
Daisy

2
Corretto, non discende da bash. Sarebbe più preciso dire che sono discendenti di sh (la shell Bourne originale), ma neanche questo è del tutto corretto.
Zlatko,

È possibile utilizzare l'utilità checkbashismsper verificare che lo script sia conforme a POSIX.
donothingsuccorso

Risposte:


18

La risposta breve è no, non sono compatibili al 100%.

Ma la maggior parte delle shell è abbastanza vicina alla base, quindi raramente ti imbatteresti in incongruenze. In effetti, la maggior parte delle shell differisce non molto per la sintassi aggiunta, ma per alcune funzionalità extra come il completamento delle schede e simili.

Inoltre, dashè una specie di discendente di ash- o porta da BSD a Linux, per essere precisi. E tutti dovrebbero essere discendenti o diverse implementazioni di sh. In realtà, shè sulla maggior parte dei sistemi solo un link simbolico a bash, dasho qualcos'altro. Ciò che conta è la conformità POSIX e quando si scrivono script in base agli standard, non si verificano problemi.

La differenza tra queste shell è nelle ottimizzazioni e nelle prestazioni. Sono quindi meno ricchi di funzionalità bash, ma sono shell completamente legittime. Bash è ricco di funzionalità per il lavoro interattivo, ma ad esempio utilizza più memoria.


Ma per l'utilizzo degli script, sono compatibili?
user1115057

E riguardo alla conformità POSIX, anche se seguo quello standard, se uno script è scritto per Bash, non credo che verrà eseguito su alcun sh o il suo discendente
user1115057

Dovrebbero essere compatibili tra loro se non si utilizzano alcune funzioni oscure. Ma se usi lo script bash, potresti riscontrare altri problemi.
Zlatko,

non ho mai pensato di usare bash con sh o ash o trattino. Quali sono quelle caratteristiche oscure?
user1115057

1
molte delle nuove funzionalità di bash sono aggiunte su POSIX, quindi è sempre più probabile che tu scriva codice non portabile se le stai usando. IIRC anche il costrutto [[]] non è in sh. Nota anche che se non stai scrivendo un puro script di shell, entrano in gioco anche le differenze di strumenti (diverse versioni di sed, grep, awk ...).
lynxlynxlynx,

1

Va notato che su alcuni sistemi, in particolare Debian, / bin / ash non è disponibile:

$ type ash dash
bash: type: ash: not found
dash is /bin/dash

2
Potrebbero avere cenere di occupato.
muru,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.