In primo luogo, potresti considerare semplicemente la sostituzione di /bin/bash
con una versione più aggiornata.
In secondo luogo, se non ti senti a tuo agio invalidando la tua garanzia e quando hai già un problema con uno script esistente, ignora la sua #!
riga invocandola come:
/usr/local/bin/bash /path/to/script.bash
args...
(Puoi utilizzare bash
anziché /usr/local/bin/bash
se la tua $PATH
è nell'ordine corretto.)
In terzo luogo, se questo script è specifico per i dispositivi Apple e deve avere Bash versione 4, quindi impostarlo sempre su #!/usr/local/bin/bash
, poiché non vi è alcun vantaggio impostarlo su qualsiasi altra cosa.
In quarto luogo, considera l'utilizzo del link - tieni presente che hai bisogno della versione "sorgente" dello script per non essere in /usr/local/bin
; direttamente nel repository di origine sarebbe l'ideale.
Sorgente vs Distribuisci
La tua domanda sull'impostazione della riga #!
nel repository source mette in luce una malintesa estremamente diffusa sugli script: l'idea che uno script, semplicemente perché è "testo", non dovrebbe essere necessario "preparato per l'uso" in qualsiasi senso.
Per altri tipi di programmi è ovvio: devono essere compilati. E se sono grandi script python o perl, hanno bisogno di un pacchetto o di un programma di installazione che includa tutte le dipendenze dei moduli.
Ma anche uno script di shell ha bisogno, come minimo, di avere la proprietà e le autorizzazioni impostate e di essere collocato in una directory bin
. In genere ciò si verifica quando un pacchetto viene creato per una classe di dispositivo o quando lo script è installato su un dispositivo di destinazione. Questo è anche il momento appropriato per impostare la riga #!
in modo che corrisponda all'ambiente di distribuzione.
Faccio non consiglio #!/usr/bin/env bash
La diffusa promozione di #!/usr/bin/env
indebolisce leggermente la sicurezza generale, ma in un modo che probabilmente non morde le persone che lo scrivono, solo gli utenti da qualche parte lungo la traccia. Perciò non lo consiglio; anzi, prevedo che alla fine tornerà e morderà i tuoi clienti, i clienti dei tuoi clienti o i client dei tuoi clienti ....
È promosso come "portatile", ma non è vero: i dispositivi Android e OpenWRT non hanno nemmeno /usr
molto meno /usr/bin/env
, quindi è abbastanza inutile lì. Quindi, in pratica, i principali beneficiari sono gli utenti Apple.
Se lo script richiede una nuova versione di bash, la versione di sistema semplicemente non funzionerà, quindi è inutile usarla come fallback. Se non hai bisogno dell'ultima versione, allora averla corretta come / bin / bash va bene.
In breve, se stai distribuendo uno script ad Apple che richiede Bash versione 4, allora dovresti usare #!/usr/local/bin/bash
, sia quando lo script viene creato in un pacchetto installabile, sia quando lo script è installato su un particolare dispositivo.