Portál AbcLinuxu, 6. května 2025 18:01
#!/bin/bash config="`wget -qO- http://www.example.com/webcam/config.php`" raspistill $config -o /home/pi/camera/actual.jpg$config funguje, protože pokud tam vložím echo, získám například: -w 2592 -h 1944 -q 84 -t 2000 -ss 5900000 -ISO 320
Skús to takto
#!/bin/bash
config="`wget -qO http://www.example.com/webcam/config.php`"
raspistill "$config" -o /home/pi/camera/actual.jpg
exit 0
Určite by som skontroloval prikaz či tam nemáš preklep.
pi@raspberrypi ~/camera $ sh config.sh : not found2: config.sh: )nvalid command line option ( -w 2592 -h 1944 -q 84 -t 2000 -ss 5900000 -ISO 320
No vida, kdybyste tu chybovou hlášku ukázal hned, mohlo být všechno hned jasnější: ten stahovaný soubor je podle všeho ukončen CRLF, ale bash tam CR nechá (proto ta pravá závorka na začátku řádku) a programu to vadí. Takže buď bych doporučil opravit (dos2unix) ten soubor přímo na serveru (a pro příště začal používat civilizovaný editor používající správné konce řádků) nebo to dodatečně přefiltrovat např.
#!/bin/bash config="`wget -qO- http://www.example.com/webcam/config.php | tr -d '\r\n'`" raspistill $config -o /home/pi/camera/current.jpg
(Ta rada s uvozovkami kolem $config
je v tomto případě chybná, protože pak by se celý řetězec předal jako jeden parametr.)
P.S.: anglické slovo "actual" znamená "skutečný", ne "aktuální".
pi@raspberrypi ~/camera $ sh camera.sh )nvalid command line option (
V tom případě by mne zajímal výstup
wget -qO- http://www.example.com/webcam/config.php | od -c
Nepotřebuje on náhodou smazat jenom \r
, nikoliv \n
?
Taky tady není jasné, v jakém formátu je ten stahovaný soubor. Kdyby to byl shell, třeba by se mohlo hodit ještě něco takového:
( script="$(sed 's/\(;[ \t]*\)*$//' | tr '\n' ';')" eval $script ) <<BLAH echo blabla sleep 1; uptime sleep 1 date; date +%s; who ;:; BLAH
Tohle^^^ mi funguje a fakt to interpretuje ten skript v HERE dokumentu. Nicméně bez podrobnější specifikace toho skriptu, tj. jak to jako má vypadat a co přesně je cílem, se dá všeho všudy divoce hádat.
Přesně tenhle problém jsem už párkrát viděl, kdykoliv se někdo snažil na normálním systému použít zmrvené textové soubory z béčkoých systémů, které se dosud nevzpamatovaly z věku jehličkových tiskáren a dálnopisů.
Znak carriage return většinou způsobuje tyto záhady. Soubor je potřeba před spuštěním zkonvertovat pomocí dos2unix
. Mnohem lepší ovšem bude napsat ho přímo v textovém editoru na normálním systému — pak žádný záhadný problém nenastane.
Mimochodem, u krátkého skriptu bez diakritiky je skoro jedno, jestli bude uložený v UTF-8 nebo v nějakém paskvilokódování. V tomto konkrétním případě není problém v kódování, ale v koncích řádků.
Tak KWrite tam taky umí dát BOM a pak se jeden diví, proč mu nejde přeložit soubor v TeXu. (Kompilátory C zase leckdy BOM bez problémů sežerou.) Jak moc velký to má či nemá smysl, nad tím jsem nikdy moc nepátral. UTF-8 soubory vytvořené na Intelu s češtinou a bez BOM jsem vždy bez nejmenších problémů otevřel na SPARCu i na Power7. A totéž platí naopak. (Takže tenhle BOM asi nemá mnoho společného s endianness platforem.) Od těch dob jsem si vkládání BOM v editorech vždy vypínal, aby mě to pak v nějakém nečekaném okamžiku nestřelilo do prdele.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.