/ / OS X: Bash-Version für Root-Benutzer aktualisieren - bash, macos

OS X: Update Bash-Version für Root-Benutzer - Bash, Macos

Kleine Voraussetzung: Ich bin auf OS X, die Bash-Version ist eine ältere 3.x-Version. Da ich einige moderne Funktionen benötigte, habe ich vor einiger Zeit auf 4.x aktualisiert.

Ich habe ein Skript geschrieben, das funktioniert, wenn es als aktueller Benutzer ausgeführt wird, aber wenn es als root über eine PLIST-Datei / launchd ausgeführt wird, schlägt es fehl.

Das liegt daran, dass ich anscheinend nur die Bash-Version für meinen Benutzer aktualisiert habe, nicht root.

Wie kann ich bash auch für den root-Benutzer aktualisieren, und ist das sicher?

Eine andere Möglichkeit wäre natürlich, einen "benutzerdefinierten" Shebang zu verwenden, der auf meine aktualisierte Bash-Version verweist, aber das scheint ein wenig hacky zu sein, da es auf anderen Systemen garantiert fehlschlägt.

Ich weiß auch von der UserName Schlüssel für Plist-Dateien, aber leider wennAls mein Benutzer ausführend, wird das Skript nicht aufgerufen (wahrscheinlich ein Pfadproblem, denke ich). Ich hatte gehofft, dass eine Aktualisierung der Basis die elegantere Lösung wäre.

Antworten:

1 für die Antwort № 1

macOS wird mit bash v3 in / bin / bash ausgeliefert. Sie sollten nicht versuchen, dies zu ersetzen (oder eine Datei in / bin, / sbin, / usr / bin oder / usr / sbin); Der Systemintegritätsschutz verhindert dies und das Überschreiben ist eine schlechte Idee. Als Ergebnis Skripte mit a #!/bin/bash sollte immer unter bash v3 laufen.

Eine Sache, die du tun könntest, ist / usr / local / bin, installiere dort bash v4 und benutze dann einen shebang von #!/usr/bin/env bash. / usr / local / bin wird zuerst im Standardpfad in macOS aufgeführt (obwohl es nicht standardmäßig vorhanden ist), sodass shebang die neue bash unter allen Konten verwenden sollte.

Nur für den Fall, ich würde dem Skript eine Versionsüberprüfung hinzufügen, bevor es irgendwelche v4-Funktionen verwendet. Etwas in der Art:

if [ "${BASH_VERSINFO:-0}" -lt 4 ]; then
echo "This script ($0) requires bash version 4 or later" >&2
exit 1
fi