TinyCore Linux & RVM

7

Ich verwende TinyCore Linux und als ich versuchte, RVM zu installieren (benötigte eine tragbare Linux-Distribution für QA Automation), wird immer wieder eine Fehlermeldung angezeigt sh: syntax error:unexpected redirection.

Ich bin nicht sicher, warum ich diesen Fehler echo $SHELLerhalte, da der Befehl BASH zurückgibt.

Irgendwelche Ideen, wie ich das zum Laufen bringen oder mehr Details zu diesem Thema erfahren könnte?

Jasonwryan
quelle
Weitere Details darüber, welche Befehle Sie ausgeführt haben, wie weit sie gekommen sind usw. können hilfreich sein.
@karpie Leider ist das so weit wie es ging, nachdem ich den Befehl eingegeben habe: bash << (curl -s rvm.beginrescueend.com/install/rvm )

Antworten:

4

Auf Ihrer Tiny Core Linux-Installation ist wahrscheinlich eine Shell mit minimalem Minimum installiert. Dies ist wahrscheinlich eine Busybox . Sie können dies überprüfen, indem Sie überprüfen, ob /bin/sheine Verknüpfung zu etwas anderem besteht:

ls -l /bin/sh
lrwxrwxrwx    1 root     root             7 Dec 15 20:52 /bin/sh -> busybox

Da Tiny Core Linux das Betriebssystem mit dem niedrigsten Minimum in den Arbeitsspeicher lädt, ist dies wünschenswert. Wenn Sie jedoch eine Shell mit umfassenderen Funktionen benötigen, können Sie diese über den Anwendungsbrowser installieren (siehe die Liste der verfügbaren Anwendungen hier , die Befehlszeilenversion des Anwendungsbrowsers lautet tce-ab). Tiny Core Linux hat derzeit: bashund tcsh.

So installieren Sie bash:

tce-load -wi bash.tcz

Die Standard-Shell ist weiterhin /bin/shverfügbar. Sie können jedoch eine Bash-Shell erzeugen, indem Sie sie ausführen bash.

So legen Sie die tcuserStandard-Shell fest:

which bash | sudo tee -a /etc/shells > /dev/null
sudo sed -i "/$(cat /etc/sysconfig/tcuser)/ s#:[^:]\+\$#:$(which bash)#" /etc/passwd

Möglicherweise möchten Sie die GNU auch installieren, coreutilswenn Sie nach weiteren GNU-Standarddienstprogrammen zur Verwendung in Bash-Skripten suchen:

tce-load -wi coreutils.tcz
TrinitronX
quelle
1

Es sieht so aus, als würde eines der Skripte unter ausgeführt /bin/sh, verwendet jedoch möglicherweise <<<oder erweiterte Funktionen von bash <(. Sie haben vermutlich Asche als /bin/sh; Das ist legitim (und Asche ist messbar schneller und verbraucht weniger Speicher als Bash, weshalb viele Distributionen Bash nicht als setzen /bin/sh), aber gelegentlich stoßen Sie auf Skripte, die auf Bash basieren und dennoch mit beginnen #!/bin/sh.

Dass Sie haben $SHELLzu bash gesetzt ist irrelevant, jedes Skript ausgeführt wird durch die Shell auf der ersten Linie (die shebang , hier #!/bin/sh). Ich habe mir die RVM-Skripte kurz angesehen und es sieht so aus, als würden alle, die auf Bash-Erweiterungen basieren, richtig beginnen #!/usr/bin/env bash. Haben Sie eine vorherige ~/.rvm? Wenn ja, versuchen Sie es aus dem Weg zu räumen.

Sie können eine Ausführungsablaufverfolgung für ein Shell-Skript abrufen, indem Sie die Shell mit der -xOption ausführen . Führen Sie also aus bash -x ./rvmund sehen Sie, wo der Fehler auftritt. Wenn der Fehler in einem Skript auftritt, das indirekt vom Hauptskript aufgerufen wird rvm, fügen Sie auch set -xdie anderen Skripte hinzu (unmittelbar unter der #!Zeile), um eine Ausführungsablaufverfolgung für sie anzuzeigen. Dies sollte helfen, das fehlerhafte Skript zu finden.

Gilles 'SO - hör auf böse zu sein'
quelle