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 $SHELL
erhalte, da der Befehl BASH zurückgibt.
Irgendwelche Ideen, wie ich das zum Laufen bringen oder mehr Details zu diesem Thema erfahren könnte?
Antworten:
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/sh
eine Verknüpfung zu etwas anderem besteht: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:bash
undtcsh
.So installieren Sie bash:
Die Standard-Shell ist weiterhin
/bin/sh
verfügbar. Sie können jedoch eine Bash-Shell erzeugen, indem Sie sie ausführenbash
.So legen Sie die
tcuser
Standard-Shell fest:Möglicherweise möchten Sie die GNU auch installieren,
coreutils
wenn Sie nach weiteren GNU-Standarddienstprogrammen zur Verwendung in Bash-Skripten suchen:quelle
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
$SHELL
zu 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
-x
Option ausführen . Führen Sie also ausbash -x ./rvm
und sehen Sie, wo der Fehler auftritt. Wenn der Fehler in einem Skript auftritt, das indirekt vom Hauptskript aufgerufen wirdrvm
, fügen Sie auchset -x
die anderen Skripte hinzu (unmittelbar unter der#!
Zeile), um eine Ausführungsablaufverfolgung für sie anzuzeigen. Dies sollte helfen, das fehlerhafte Skript zu finden.quelle