Ich hatte ein Skript, das gut lief, aber als ich es heute lief, heißt es declare: not found
. Ich benutze die Bash-Shell und der Pfad zu Beginn des Skripts ist korrekt.
Zwei markierte Zeilen in meinem Skript lauten wie folgt:
declare -a RESPONSE
RESPONSE=($RESULT)
Es heißt auch, dass (
es unerwartet ist, aber ich vermute, dass dies auf den ersten Fehler zurückzuführen ist. Erwähnenswert ist, wenn ich deklariere, dass es direkt funktioniert.
declare | grep USER
zeigt an
USER=ashfame
USERNAME=ashfame
values="$SVN_BASH_USERNAME";
Also, was ist hier falsch?
#!/bin/bash
nur. Meinten Sie, wie ich es ausführen? Ich habe gerade versucht, es auszuführen,./script.sh
und es hat funktioniert. Aber es funktioniert nicht wiescript.sh
odersh script.sh
und ich bin ziemlich sicher, dass ich nur die letzten beiden Methoden verwendet habe, als ich es vor einer Woche erstellt habe. Was könnte das erklären?Ich vermute , dass Ihre „shebang“ Linie (die optionale erste Zeile der Datei) verweist
sh
stattbash
. Es sollte seinfür Bash-Skripte. Wenn die erste Zeile Ihres Skripts ist
dann würde dies anzeigen, dass eine streng Borowski-kompatible Shell verwendet werden soll; im Falle von Ubuntu
dash
wird verwendet. In vielen anderen Distributionen ist dies ein Problem nicht verursachen, weil sie verbinden/bin/sh
zu/bin/bash
; Ubuntu stellt jedoch eine Verknüpfung zu her/bin/dash
, damit Systemskripten schneller ausgeführt werden können.Das
declare
Builtin ist eine derbash
vielen Erweiterungen der Bourne-Shell-Skriptspezifikation.dash
implementiert nur diese Spezifikation ohne Erweiterungen.quelle
#!/bin/bash
nursh thescript.sh
, interpretiert diesh
Shelldash
es.sh script.sh
. Ich verstehe, was Sie gesagt haben, aber ich habe irgendwo gelesen, dass mit dieser Methode,bash
es interpretieren wird. Warum solltedash
es hier eine Rolle spielen? Geht das nur mit Ubuntu? Vielleicht war das, was ich las, für Linux im Allgemeinen.sh script
Ihnen führt den Befehlsh
mit dem Argument ausscript
, wodurch sh die Befehle in dieser Datei liest und ausführt. Der Shebang wird von sh nicht gelesen, er beginnt mit einem#
, wird also als Kommentar behandelt. Wenn Sie stattdessen ausführen./script
, liest der Kernel den Shebang, der in Ihrem Fall ist#!/bin/bash
, und führt ihn aus/bin/bash ./script
dash
die verwendet wird, so muss ich es klärenSo reproduzieren Sie den obigen Fehler:
Ich benutze Ubuntu 14.04 64 Bit. Fügen Sie diesen Code in eine Datei ein:
Führen Sie es so aus:
Führen Sie stattdessen die folgenden Schritte aus, um das Problem zu beheben:
Drucke:
quelle
Ich hatte das gleiche Problem, und dann erinnerte ich mich, dass Sie die richtigen Berechtigungen zuweisen müssen, um das Shell-Skript auszuführen.
Ändern Sie die Berechtigung des Skripts, zum Beispiel:
quelle
Versuchen Sie
/bin/bash
stattdessen , Ihr Skript über die Befehlszeile auszuführen, wennsh
(:Anstatt :
Versuchen :
quelle
Unter Ubuntu haben Sie möglicherweise ein Skript, das andere Skripte ausführt, auf die ich gestoßen bin.
Ändern Sie alles,
sh some_script.sh
um$SHELL some_script.sh
es zu beheben.quelle