Ich mache das in einem Skript:
read direc <<< $(basename `pwd`)
und ich bekomme:
Syntax error: redirection unexpected
in einer Ubuntu-Maschine
/bin/bash --version
GNU bash, version 4.0.33(1)-release (x86_64-pc-linux-gnu)
während ich diesen Fehler in einer anderen Suse-Maschine nicht bekomme:
/bin/bash --version
GNU bash, version 3.2.39(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
Warum der Fehler?
Antworten:
Verweist Ihr Skript auf
/bin/bash
oder/bin/sh
in seiner Hash-Bang-Zeile? Die Standardsystem-Shell in Ubuntu ist Bindestrich und nicht Bash . Wenn Sie dies getan haben, verwendet#!/bin/sh
Ihr Skript eine andere Shell als erwartet. Dash verfügt nicht über den<<<
Umleitungsoperator.quelle
Docker:
Ich habe dieses Problem von meiner Docker-Datei erhalten, wie ich hatte:
Nach diesem Problem wurde es jedoch gelöst:
Lösung:
Beachten Sie die Anführungszeichen um jeden Parameter.
quelle
Wenn Sie Folgendes verwenden, um Ihr Skript auszuführen:
Dann möchten Sie stattdessen Folgendes verwenden:
Der Grund dafür ist, dass Bash nicht die Standard-Shell für Ubuntu ist. Wenn Sie also "sh" verwenden, wird nur die Standard-Shell verwendet. Das ist eigentlich Dash. Dies geschieht unabhängig davon, ob Sie
#!/bin/bash
oben in Ihrem Skript stehen. Infolgedessen müssen Sie die Verwendung explizit angebenbash
wie oben gezeigt erfolgen soll, und Ihr Skript sollte erwartungsgemäß ausgeführt werden.Dash unterstützt keine Weiterleitungen wie Bash.
quelle
Sie können die Ausgabe dieses Befehls abrufen und in eine Variable einfügen. dann verwenden
heredoc
. beispielsweise:kann geschrieben werden wie:
und so (das ist was du willst):
Praxisbeispiel in
busybox
unterdocker
Behältern:quelle
echo 'text' | nc
was noch kürzer ist.mach es einfacher,
Oder benutze die Shell
quelle
Ein weiterer Grund für den Fehler kann sein, dass Sie einen Cron-Job ausführen, der eine Subversion-Arbeitskopie aktualisiert, und dann versucht haben, ein versioniertes Skript auszuführen, das sich nach der Aktualisierung in einem Konfliktzustand befand ...
quelle
Wenn ich auf meinem Computer ein Skript direkt ausführe, ist die Standardeinstellung
bash
.Wenn ich es mit ausführe
sudo
, ist die Standardeinstellungsh
.Deshalb habe ich dieses Problem bei meiner Verwendung festgestellt
sudo
.quelle
In meinem Fall liegt der Fehler darin, dass ich zweimal ">>" gesetzt habe
Ich korrigiere es einfach als
quelle
Bevor Sie das Skript ausführen, sollten Sie die erste Zeile des Shell-Skripts auf den Interpreter überprüfen.
Beispiel: Wenn Skripte mit / bin / bash beginnen, führen Sie das Skript mit dem folgenden Befehl "bash script_name.sh" aus.
Wenn das Skript mit / bin / sh beginnt, führen Sie das Skript mit dem folgenden Befehl "sh script_name.sh" aus.
./sample.sh - Hiermit wird der Interpreter aus der ersten Zeile des Skripts erkannt und ausgeführt.
Verschiedene Linux-Distributionen mit unterschiedlichen Shells als Standard.
quelle