So aktualisieren Sie bash unter Mac OS X Yosemite


25

Ich versuche nur, ein bisschen Bash-Scripting zu lernen. Meine alte Bash-Version:

Bash version 3.2.53(1)-release...

Ich habe meine Bash auf Mac OS X Yosemite mit Homebrew aktualisiert:

brew update
brew install bash

Dann habe ich in den Terminal-Eigenschaften den Standard-Shell-Pfad von /bin/bashauf geändert /usr/local/bin/bash(soweit ich weiß, installiert der Homebrew hier die aktualisierte Bash).

Dann habe ich das Ergebnis noch einmal überprüft (und es scheint, als wäre alles gut):

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

Aber als ich versuchte, ein einfaches Bash-Skript zu schreiben:

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

DAS ERGEBNIS IST:

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

ANSTATT:

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

Warum wird die Bash-Version auf die alte Version zurückgesetzt, wenn ich versuche, das Skript in derselben Shell auszuführen? Das macht mich nur verrückt! Bitte jemand erklärt mir, was mein Problem ist)))

Antworten:


17

Ihr Problem liegt in Ihrer ersten Zeile. Du hast das:

#!/bin/bash

die ausdrücklich angibt, dass das Shell-Skript mit dem alten ausgeführt werden soll /bin/bash. Was Sie wirklich wollen, ist Folgendes:

#!/usr/local/bin/bash

das neue bashaus nutzen /usr/local/bin.


seltsame Sache, aber es hat tatsächlich nicht funktioniert. (Still gleiche Ergebnis ((Aber ich bin sicher , dass dies ein Teil eines Problems ist
Drew

Muss ich diesen Pfad woanders angeben? In irgendeiner Shell-Datei oder so?
Drew

1
Vielleicht wird die Umgebung von der aufrufenden Shell festgelegt, dh der alten Bash? Wie genau rufen Sie Ihr Skript auf, @Andrew?
Slhck

1
@ Andrew, ich vermute, dass Sie in shist /bin. brewvielleicht hat keinen Symlink machen für bashgenannt sh. Mit Ihrem $PATHSatz richtig, versuchen Sie es wie folgt beginnen: bash script.sh.
BenjiWiebe

8
Zum späteren Nachschlagen sollten Sie#!/usr/bin/env bash
pjvandehaar

15

Installiere neue Bash:

brew install bash

Machen Sie dies zur Standard-Shell:

chsh -s /usr/local/bin/bash

Legen Sie die Umgebung in einem Skript fest:

#!/usr/bin/env bash

Verwenden von envsucht nach Bash in Ihrem $PATHund verwendet das erste, auf das es stößt. Sie können sehen, welche bashdavon verwendet werden, indem Sie Folgendes eingeben which bash. Wenn es zu sehen , /bin/bashzuerst, müssen Sie Ihre setzen $PATHin ~/.bashrcund /.bash_profile.


2
Wenn bei der Verwendung "Nicht-Standard-Shell" ausgedruckt wird chsh, müssen Sie / etc / shells aktualisieren .
Scott Willeke

6

Wie pjv betonte, sollten Sie wirklich verwenden

#!/usr/bin/env bash

in Ihren Skripten überall portabel zu sein. Zum Beispiel, wenn Sie versuchen, Ihr Skript mit auszuführen

#!/usr/local/bin/bash

es wird auf den meisten Linux-Systemen fehlschlagen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.