Oprava: Chyba syntaxe poblíž neočekávaného tokenu `('
Chyba syntaxe chybové zprávy poblíž neočekávaného tokenu `('se vyskytuje v prostředí typu Unix, Cygwin a v rozhraní příkazového řádku ve Windows. Tato chyba se pravděpodobně spustí při pokusu o spuštění skriptu shellu, který byl upraven nebo vytvořen ve starších systémech DOS / Windows nebo Mac.
Tato chybová zpráva se také objeví, když zadáváte příkazy v příkazovém řádku systému Linux pro každodenní úkoly, jako je ruční kopírování souborů atd. Hlavní důvody, proč k této chybě dochází, je buď kvůli špatné syntaxi nebo problému operačního systému při interpretaci příkazů jiného systému / skořápky.
Co způsobuje chybu syntaxe poblíž neočekávaného tokenu `('?
Důvody této chybové zprávy jsou velmi rozmanité a nelze je uvést v jednom článku, protože při provádění příkazů se vyskytují tisíce možností syntaxe. Hlavní příčiny této chyby jsou:
- Chybná syntaxe při provádění jakéhokoli příkazu na kterékoli platformě. Nepoužíváte příkaz správně nebo jste zadali nesprávnou syntaxi.
- Prostředí není kompatibilní mezi systémy Unix / DOS.
- Spouští se skript bash shell z jiného zdroje .
V tomto článku předpokládáme, že znáte základy kódování a máte představu, co děláte. Pokud jste začátečník, je nejlepší postupovat podle podrobných návodů jazyka / příkazu, který se pokoušíte provést. Pravděpodobně jste udělali chybu nějaké syntaxe.
Řešení 1: Kontrola syntaxe a formátu příkazů
Prvním a nejdůležitějším důvodem, proč se může zobrazit tato chybová zpráva, je špatná syntaxe v kódu nebo nedodržení přesného formátu příkazů. Každý příkaz má předdefinovaný formát, který můžete vidět v jeho dokumentaci. Některé parametry jsou volitelné, jiné jsou povinné.
Mimoto je třeba věnovat zvláštní pozornost dalšímu prostoru, použití dvojitých uvozovek a požadovaným povinným parametrům. Pokud některá z nich chybí nebo byla prohlášena nesprávně, nebudete moci svůj kód spustit.
Například namísto následujícího kódu
[mycom7] # ./ctopo.sh um_test1 [(1, 2), (2, 1)]
Musíte to provést jako
[mycom7] # ./ctopo.sh um_test1 "[(1, 2), (2, 1)]"
Také se ujistěte, že provádíte příkazy / shell skript správně, pokud překlenuje několik řádků.
Vzhledem k typu parametru jsou nutné uvozovky. Mezera může také zničit váš kód a vynutit chybové hlášení. Zkontrolujte, zda jste zkontrolovali úřední dokumentaci příkazu, který provádíte, a zkontrolujte, zda tam není nějaký problém.
Řešení 2: Odstraňování potíží se skriptem shellu
Pokud používáte skript shellu, který pracuje ve zdrojovém systému, ale vrací chybu v cíli, můžete skript vyřešit pomocí kontroly proměnných, které jsou uloženy během provádění, a pak se podívejte, co je příčinou problému. Toto je velmi častá příčina, protože v několika případech se prostředí snaží interpretovat netisknutelný znak.
Zkuste spustit prostředí s parametrem 'vx'. To nám ukáže, jaké příkazy se spouštějí a jaké hodnoty jsou uloženy ve skriptu. Zde můžete řešit a diagnostikovat, co se děje.
Například spusťte skript v terminálu po zahrnutí 'vx' jako:
# sh -vx ./test_script5.sh
Obsah skriptu můžete zkontrolovat pomocí příkazu 'cat' jako:
# cat test_script5.sh
Řešení 3: Použití příkazu 'dos2unix.exe'
V textových souborech Windows / DOS je nový řádek kombinací návratu vozíku (\ r) následovaného řádkovým posuvem (\ n). V Macu (před Mac OS X) byl zalomení řádku použit jednoduchý návrat vozíku (\ r). Unix / Linux a Mac OS X používají zalomení řádků (\ n). Používáte-li Cygwin, selže zpracování skriptů vytvořených DOS / Windows a starším Macem kvůli zvláštnímu znaku Carriage Return (\ r).
Zde můžete vytvořit příkaz 'dos2unix.exe', který převede skript do správného formátu a poté jej můžete spustit bez problémů.
Na závěr je třeba prozkoumat vaše příkazy a typ platformy, kterou používáte, a ujistit se, že neexistují žádné nesrovnalosti. Protože nemůžeme pokrýt každou možnost, měli byste vědět, jaké druhy chyb se mohou vyskytnout a jak je opravit.