GNU/Linux >> Znalost Linux >  >> Linux

chyba syntaxe poblíž neočekávaného tokenu ' - bash

Děkuji @jdt za vaši odpověď.

Poté, a protože mám stále tento problém s návratem vozíku, napsal jsem ten malý skript. Spusťte pouze carriage_return a budete vyzváni, abyste soubor "vyčistili".

https://gist.github.com/kartonnade/44e9842ed15cf21a3700

alias carriage_return=remove_carriage_return
remove_carriage_return(){

# cygwin throws error like : 
# syntax error near unexpected token `$'{\r''
# due to carriage return
# this function runs the following
# cat originalfile | tr -d "\r" > newfile

read -p "File to clean ? "
file_to_clean=$REPLY
temp_file_to_clean=$file_to_clean'_'

# file to clean => temporary clean file
remove_carriage_return_one='cat '$file_to_clean' | tr -d "\r" > '
remove_carriage_return_one=$remove_carriage_return_one$temp_file_to_clean

# temporary clean file => new clean file
remove_carriage_return_two='cat '$temp_file_to_clean' | tr -d "\r" > '
remove_carriage_return_two=$remove_carriage_return_two$file_to_clean

eval $remove_carriage_return_one
eval $remove_carriage_return_two
# remove temporary clean file 
eval 'rm '$temp_file_to_clean

}


Může se jednat o problém s kódováním souboru.

Při práci na souborech mezi různými operačními systémy a editory jsem narazil na problémy s kódováním typů souborů – v mém případě zejména mezi systémy Linux a Windows.

Doporučuji zkontrolovat kódování vašeho souboru, abyste se ujistili, že je vhodný pro cílové linuxové prostředí. Myslím, že problém s kódováním je méně pravděpodobný vzhledem k tomu, že používáte MAC, než kdybyste použili textový editor Windows, nicméně si myslím, že kódování souborů stále stojí za zvážení.

--- UPRAVIT (Přidejte skutečné řešení podle doporučení @Potatoswatter)

Abych demonstroval, jak by mohl být problém s kódováním typu souboru, zkopíroval jsem/vložil jsem váš vzorový skript do programu Poznámkový blok ve Windows (nemám přístup k počítači Mac), poté jsem jej zkopíroval do počítače s linuxem a spustil:

[email protected]:~/windows> sh ./originalfile             
./originalfile: line 2: syntax error near unexpected token `$'{\r''
'/originalfile: line 2: `test() {

V tomto případě Poznámkový blok uložil soubor s návraty vozíku a odřádkováním, což způsobilo výše uvedenou chybu. \r označuje návrat vozíku (systémy Linux ukončují řádky odřádkováním \n pouze).

Na linuxovém počítači můžete tuto teorii otestovat spuštěním následujícího příkazu k odstranění návratů vozíku ze souboru, pokud jsou přítomny:

cat originalfile | tr -d "\r" > newfile

Potom zkuste spustit nový soubor sh ./newfile . Pokud to funguje, problém byl návrat vozíku jako skryté znaky.

Poznámka: Toto není přesná replikace vašeho prostředí (nemám přístup k Macu), ale zdá se mi pravděpodobné, že problém je v tom, že se editor někde vrátí do souboru.

--- /UPRAVIT

Abychom to trochu upřesnili, operační systémy a editory mohou mít různé výchozí hodnoty kódování souborů. Aplikace a editory obvykle ovlivní použité kódování typu souboru, například si myslím, že Microsoft Notepad a Notepad++ jsou výchozí Windows-1252. Mohou také existovat rozdíly v novém řádku, které je třeba vzít v úvahu (V prostředí Windows se k ukončení řádků v souborech často používá návrat vozíku a odřádkování, zatímco v Linuxu a OSX se obvykle používá pouze odřádkování).

Podobná otázka a odpověď, která odkazuje na kódování souboru, je zde:při provádění bash skriptu se zobrazuje špatný znak


zkuste něco jako

$ sudo apt-get install dos2unix
$ dos2unix offendingfile

Snadný způsob, jak převést example.sh soubor na UNIX pokud pracujete ve Windows, je třeba použít NotePad++ (Edit>EOL Conversion>UNIX/OSX Format)

Můžete také nastavit výchozí EOL v notepad++ (Nastavení>Předvolby>Nový dokument/výchozí adresář>v poli Formát vyberte Unix/OSX)


Linux
  1. Více logických operátorů ((a || B) &&C) a „chyba syntaxe blízko neočekávaného tokenu“?

  2. Proč překladový soubor Bash neobsahuje všechny chybové texty?

  3. Bash:Chyba syntaxe poblíž neočekávaného tokenu `}'?

  1. Chyba Tar:Neočekávané EOF v archivu

  2. Chyba syntaxe:neočekávaný konec souboru (očekává se tedy)

  3. Chyba syntaxe poblíž neočekávaného tokenu 'then'

  1. Zpracování chyb ve skriptech Bash

  2. Naučte se zpracování chyb Bash na příkladu

  3. Wget error bash Windows Subsystém pro Linux