Portál AbcLinuxu, 10. května 2025 05:36

Dotaz: Chyba v syntaxi?

31.3.2010 12:14 Sunshine
Chyba v syntaxi?
Přečteno: 240×
Odpovědět | Admin
Udelal jsem si jednoduchy script, ovsem nevim kde je chyba. Doma mi to funguje naprostop bez problemu. Ovsem nahraju to na nas server (Ubuntu) a pise mi to chybu, ovsem nevim proc.

http://www.upload.bagocina.com/uploads/1270070230.txt

Jiste tomu rozumite, ale presto radsi napisu, ze je to nekonecna smycka pro restartovani core emulatoru.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

31.3.2010 12:28 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Chyba v syntaxi?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Namiesto "[ 1=1 ]" (ma to byt "[ 1 = 1 ]") daj "true".
If you hold a Unix shell up to your ear, you can you hear the C.
31.3.2010 16:43 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Chyba v syntaxi?
Ještě doplním vysvětlení. Zápis "[ 1 = 1 ]" sice vypadá jako nějaká konstrukce jazyka shellu, ale to je jen zdání. Ve skutečnosti je "[" jen alias pro příkaz test. V případě bashe jsou oba implementovány jako builtin, pro jiné shelly jde o normální příkazy, které podle okolností najdete v /bin nebo /usr/bin. Aby ten příkaz dělal co má, potřebuje dostat správným způsobem oddělené parametry "1", "=", "1" (a v případě "[" ještě závěrečný "]", který ignoruje). Proto v "podmínce" nelze beztrestně vynechávat mezery.
Jakub Lucký avatar 31.3.2010 14:45 Jakub Lucký | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: Chyba v syntaxi?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Problém je v tom, že používáte /bin/sh...

sh je historický shell, který se dnes nepoužívá a místo něj se používají programy (bash, dash), které umí staré sh emulovat. Potíž je v tom, že pokud smícháte syntaxi sh a (třeba) bash, tak vám to bash bude brát, i když tam máte #!/bin/sh, ale žádný další už ne, protože to není ani jeho syntax, ani sh syntax. A v Ubuntu je (pokud mě nešálí paměť) jako sh intepreter dash

/bin/sh je proto jakýmsi standardem a používá se téměř výhradně pokud máte jistotu, že váš skript je v čisté sh syntaxi (v Debianu (a možná i Ubuntu) je na to skript checkbashisms)

A tudíž řešení: změnit úvodní řádek na #!/bin/bash a takto to dělat ve všech skriptech, které nechcete mít multi-interpretové

P.S. to cd tam máte zbytečně, stačí to napsat jako /cesta/k/binárce/binárka
If you understand, things are just as they are; if you do not understand, things are just as they are.
31.3.2010 15:30 cronin | skóre: 49
Rozbalit Rozbalit vše Re: Chyba v syntaxi?
Tie formulacie su vo viacerych bodoch prinajmensom nepresne.
sh je historický shell, který se dnes nepoužívá a místo něj se používají programy (bash, dash), které umí staré sh emulovat.
Nie cely svet je Linux, pozor.
A tudíž řešení: změnit úvodní řádek na #!/bin/bash
Tym sa spolahlivo odrovna prenostitelnost napr. na BSD. Ked uz, tak
#! /usr/bin/env bash
P.S. to cd tam máte zbytečně, stačí to napsat jako /cesta/k/binárce/binárka
Co moze a nemusi byt pravda. Zatial co
/cesta/k/binarke/binarka
ponecha nezmeneny pracovny adresar, tak
cd /cesta/k/binarke
./binarka
pracovny adresar zmeni.
31.3.2010 15:36 l4m4
Rozbalit Rozbalit vše Re: Chyba v syntaxi?
#! /usr/bin/env bash
je příspěvek do soutěže o nejzbytečnější spuštění dalšího procesu.

O portabilitu se postará instalátor přepsáním shbangů při instalaci, je-li to nutné.
31.3.2010 15:37 cronin | skóre: 49
Rozbalit Rozbalit vše Re: Chyba v syntaxi?
:-D
Jakub Lucký avatar 31.3.2010 15:51 Jakub Lucký | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: Chyba v syntaxi?
Formulace jsou nepřesné, ale myslím že vzhledem k úrovni tazatele myslím dostatečné...

Mimochodem, BSD používá původní Sh?

Jinak env jako hashbang mi přijde zbytečnost, obzvlášť, když se bavíme o Ubuntu

Co se té připomínky k cd týče, ta je určitě validní
If you understand, things are just as they are; if you do not understand, things are just as they are.
31.3.2010 16:30 cronin | skóre: 49
Rozbalit Rozbalit vše Re: Chyba v syntaxi?
Formulace jsou nepřesné, ale myslím že vzhledem k úrovni tazatele myslím dostatečné...
Myslim, ze ani neskuseneho pouzivatela netreba zbytocne pliest skreslenymi informaciami. Zjednodusene informacie su namieste, skreslene nie.
Mimochodem, BSD používá původní Sh?
Ako interaktivny shell pouziva BSD [t]csh, co je v porovnani s Bourne[-Again] shellom absolutne odlisne udelatko. Zakladny system obsahuje sh, ktory sa hojne vyuziva na skriptovanie, rovnako ako v Linuxe. Zakladny system ale neobsahuje bash; ten je povazovany za externu aplikacu. Ak sa doinstaluje z balikov alebo portov, instaluje sa do /usr/local/bin/bash; preto ta namietka voci pevnej ceste k bash-u v shebangu.

Jakub Lucký avatar 31.3.2010 15:51 Jakub Lucký | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: Chyba v syntaxi?
Formulace jsou nepřesné, ale myslím že vzhledem k úrovni tazatele myslím dostatečné...

Mimochodem, BSD používá původní Sh? (nevím, ptám se ze zvědavosti)

Jinak env jako hashbang mi přijde zbytečnost, obzvlášť, když se bavíme o Ubuntu

Co se té připomínky k cd týče, ta je určitě validní
If you understand, things are just as they are; if you do not understand, things are just as they are.
31.3.2010 16:47 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Chyba v syntaxi?
S tím bych si dovolil nesouhlasit. V tom skriptu není - až na chybějící mezery - nic, s čím by si neporadil i obyčejný sh. A bez nich si s tím neporadí ani bash - přesněji řečeno bude to sice dělat to, co tazatel zamýšlel, ale jen šťastnou shodou okolností (doporučuji vyzkoušet s 1=0 a rozmyslet si, proč je i v tomto případě podmínka považována za splněnou).

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.