Come aggiornare bash su Mac OS X Yosemite


25

Sto solo cercando di imparare un po 'di scripting bash. La mia vecchia versione bash:

Bash version 3.2.53(1)-release...

Ho aggiornato il mio bash su mac os x yosemite con homebrew:

brew update
brew install bash

Quindi nelle proprietà del terminale ho cambiato il percorso standard della shell da /bin/basha /usr/local/bin/bash(Come ho capito questo è dove l'homebrew installa la bash aggiornata).

Quindi ho verificato nuovamente il risultato (e sembra che sia tutto a posto):

$ echo $BASH_VERSION
Bash version 4.0.33(0)-release...

Ma quando stavo cercando di scrivere un semplice script bash:

#!/bin/bash
echo "Bash version ${BASH_VERSION}..."
for i in {0..10..2}
  do
     echo "Welcome $i times"
 done

IL RISULTATO È:

Bash version 3.2.53(1)-release...
Welcome {0..10..2} times

INVECE DI:

Bash version 4.0.33(0)-release...
Welcome 0 times
Welcome 2 times
Welcome 4 times
Welcome 6 times
Welcome 8 times
Welcome 10 times

Perché la versione di Bash torna alla vecchia quando sto cercando di eseguire lo script nella stessa shell ??? Questo mi fa impazzire! Per favore qualcuno mi spieghi qual è il mio problema)))

Risposte:


17

Il tuo problema è nella tua prima riga. Tu hai questo:

#!/bin/bash

che afferma esplicitamente che lo script della shell dovrebbe essere eseguito con il vecchio /bin/bash. Quello che vuoi davvero , è questo:

#!/usr/local/bin/bash

per usare il nuovo bashda /usr/local/bin.


cosa strana, ma in realtà non ha funzionato. Sempre lo stesso risultato (((Ma sono sicuro che questa sia una parte di un problema
Drew

Devo specificare questo percorso altrove? In qualche file shell o qualcosa del genere?
Disegnato il

1
Forse l'ambiente è impostato dalla shell chiamante, ovvero il vecchio Bash? Come chiami esattamente la tua sceneggiatura, @Andrew?
Slhck,

1
@Andrew, sospetto che tu shsia dentro /bin. brewforse non ha creato un collegamento simbolico per bashchiamato sh. Con il vostro $PATHinsieme correttamente, provare ad avviare in questo modo: bash script.sh.
BenjiWiebe,

8
Per riferimento futuro, dovresti probabilmente usare#!/usr/bin/env bash
pjvandehaar il

15

Installa nuovo bash:

brew install bash

Imposta come shell predefinita:

chsh -s /usr/local/bin/bash

Imposta l'ambiente in uno script:

#!/usr/bin/env bash

Utilizzando envcercherà Bash nel tuo $PATHe userà il primo che incontra. Puoi vedere quale bashutilizzerà digitando which bash. Se viene visualizzato per /bin/bashprimo, dovrai impostare $PATHin ~/.bashrce /.bash_profile.


2
Se vedi "shell non standard" stampata durante l'uso chsh, dovrai aggiornare / etc / shells .
Scott Willeke,

6

Come ha sottolineato pjv, dovresti davvero usare

#!/usr/bin/env bash

nei tuoi script ovunque per essere portatile. Ad esempio, se si tenta di eseguire lo script con

#!/usr/local/bin/bash

fallirà sulla maggior parte dei sistemi Linux.

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.