Portál AbcLinuxu, 26. dubna 2024 06:13


Dotaz: Jak přepsat bash konstrukci do bourne shellu

19.6.2015 13:29 majales | skóre: 29 | blog: Majales
Jak přepsat bash konstrukci do bourne shellu
Přečteno: 227×
Odpovědět | Admin
Zdravím,

mám konstrukci která ověřuje dostupnost souboru online. V bashi normálně funguje, ale v bourne shellu nikoliv.
if [[ `wget -S --spider URL  2>&1 | grep 'HTTP/1.1 200 OK'` ]]; then echo "true"; fi
Nevěděl by někdo jak to přepsat i pro /bin/sh?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.6.2015 14:00 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Jak přepsat bash konstrukci do bourne shellu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Odhadom:
wget -S --spider URL  2>&1 | grep 'HTTP/1.1 200 OK'
if [[ $? -eq 0 ]]
then 
  echo "true"
fi
19.6.2015 15:52 majales | skóre: 29 | blog: Majales
Rozbalit Rozbalit vše Re: Jak přepsat bash konstrukci do bourne shellu
nakonec mi to funguje takto:
var1=`wget -S  --spider 'URL'  2>&1 | grep 'HTTP/1.1 200 OK' `
  if [ "$var1" ]; then
  echo "true"
fi
19.6.2015 16:14 Ja
Rozbalit Rozbalit vše Re: Jak přepsat bash konstrukci do bourne shellu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co prostě:

if wget -S --spider URL 2>&1 | grep -q 'HTTP/1.1 200 OK'; then echo "true"; fi
19.6.2015 16:39 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Jak přepsat bash konstrukci do bourne shellu

Na "grep -q" pozor, on totiž skončí, jakmile najde vzorek, takže wget dostane SIGHUP a skončí také. Takže by bylo potřeba spíš

if wget -S --spider URL 2>&1 | grep 'HTTP/1.1 200 OK' >/dev/null; then echo "true"; fi 
19.6.2015 17:00 Ja
Rozbalit Rozbalit vše Re: Jak přepsat bash konstrukci do bourne shellu
A to je taky pravda, jsem já to nedovtipa... a když už jsme u toho, nestačilo by prosté:

if wget -S --spider URL 2>&1; then echo "true"; fi
19.6.2015 17:24 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Jak přepsat bash konstrukci do bourne shellu
Výsledek by nebyl stejný jako u původního konstrukce, protože by hlásil úspěch i v případě, že verze HTTP v odpovědi není 1.1 (ale třeba 1.0) nebo stavový kód není 200 (ale pořád znamená úspěch). Což ale pravděpodobně znamená, že by lépe odpovídal tomu, co tazatel opravdu potřebuje.
19.6.2015 17:29 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Jak přepsat bash konstrukci do bourne shellu
Lišil by se i výsledek v případě, že by se stahovalo víc souborů: grepu by stačilo najít jeden úspěšný dotaz, zatímco návratový kód wget je nula jen když uspějí všechny. V tomto případě bych ale řekl, že obě varianty dávají za určitých okolností smysl, takže by si tazatel musel rozmyslet, co vlastně chce.

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.