Ich habe das Hinzufügen von Ausführungsberechtigungen gelöst:
sudo chmod +x file.sh
Entfernen Sie ;
vom Ende Ihrer Skriptzeilen.
Dies passiert in meiner Bash nicht, daher bin ich mir nicht sicher, was genau falsch ist, aber ich vermute Folgendes:
;
ist ein Trennzeichen von Befehlen. Da Ihr letzter Befehl mit ;
endet , erwartet Ihre Bash wahrscheinlich einen weiteren Befehl danach. Da das Skript jedoch beendet ist, liest es einen leeren Befehl, den es nicht ausführen kann.
Meine Vermutung ist, dass Sie nicht druckbare Steuerzeichen in der Datei haben, oder sie hat \r\n
(CRLF) Zeilenenden (DOS/Windows-Modus).
Versuchen Sie es mit diesen Befehlen:
$ hexdump -C build.sh
00000000 23 21 2f 62 69 6e 2f 62 61 73 68 0a 63 64 20 7e |#!/bin/bash.cd ~|
00000010 2f 77 6f 72 6b 73 70 61 63 65 2f 74 72 75 6e 6b |/workspace/trunk|
00000020 3b 0a 73 76 6e 20 75 70 3b 0a |;.svn up;.|
0000002a
$ file build.sh
build.sh: Bourne-Again shell script, ASCII text executable
$ unix2dos build.sh
unix2dos: converting file build.sh to DOS format ...
$ hexdump -C build.sh
00000000 23 21 2f 62 69 6e 2f 62 61 73 68 0d 0a 63 64 20 |#!/bin/bash..cd |
00000010 7e 2f 77 6f 72 6b 73 70 61 63 65 2f 74 72 75 6e |~/workspace/trun|
00000020 6b 3b 0d 0a 73 76 6e 20 75 70 3b 0d 0a |k;..svn up;..|
0000002d
$ file build.sh
build.sh: Bourne-Again shell script, ASCII text executable, with CRLF line terminators
Ich habe meinen Fehler von diesem Befehl behoben.
sudo chmod +x build.sh