it-swarm.com.de

So aktualisieren Sie bash unter Mac OS X Yosemite

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/bash zu /usr/local/bin/bash geändert (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)))

25
Drew

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

#!/bin/bash

in dem explizit angegeben ist, dass das Shell-Skript mit dem alten /bin/bash ausgeführt werden soll. Was Sie wirklich wollen, ist Folgendes:

#!/usr/local/bin/bash

um die neue bash aus /usr/local/bin zu verwenden.

17
BenjiWiebe

Neue Bash installieren:

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

Wenn Sie env verwenden, wird in Ihrem $PATH nach Bash gesucht und der erste gefunden. Sie können sehen, welche bash verwendet wird, indem Sie which bash eingeben. Wenn /bin/bash zuerst angezeigt wird, müssen Sie Ihren $PATH in ~/.bashrc und /.bash_profile einstellen.

14
Ben

Wie pjv betonte, sollten Sie wirklich verwenden

#!/usr/bin/env bash

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

#!/usr/local/bin/bash

es wird auf den meisten Linux-Systemen fehlschlagen.

5
Agoston Horvath