Vyřešil jsem přidání oprávnění ke spuštění:
sudo chmod +x file.sh
Odebrat ;
od konce řádků skriptu.
To se v mém bash neděje, takže si nejsem jistý, co přesně je špatně, ale můj odhad je tento:
;
je oddělovač příkazů. Protože váš poslední příkaz končí na ;
, váš bash pravděpodobně očekává další příkaz poté. Po dokončení skriptu však načte prázdný příkaz, který nelze provést.
Odhaduji, že v souboru máte netisknutelné řídicí znaky, nebo má soubor \r\n
(CRLF) konce řádků (režim DOS/windows).
Zkuste to zkontrolovat pomocí těchto příkazů:
$ 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
Vyřešil jsem svou chybu z tohoto příkazu.
sudo chmod +x build.sh
Najít a nahradit ve skriptování shellu
Pomocí historie bash získáte předchozí příkaz, zkopírujte jej a poté jej „spusťte“, ale s komentářem příkazu