abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
včera 21:21 | Nová verze Ladislav Hagara | Komentářů: 0
včera 11:44 | Zajímavý projekt

Na Indiegogo byla spuštěna kampaň na podporu herní mini konzole a multimediálního centra RetroEngine Sigma od Doyodo. Předobjednat ji lze již od 49 dolarů. Požadovaná částka 20 000 dolarů byla překonána již 6 krát. Majitelé mini konzole si budou moci zahrát hry pro Atari VCS 2600, Sega Genesis nebo NES. Předinstalováno bude multimediální centrum Kodi.

Ladislav Hagara | Komentářů: 0
včera 00:10 | Nová verze

Byla vydána verze 4.7 redakčního systému WordPress. Kódové označením Vaughan bylo vybráno na počest americké jazzové zpěvačky Sarah "Sassy" Vaughan. Z novinek lze zmínit například novou výchozí šablonu Twenty Seventeen, náhledy pdf souborů nebo WordPress REST API.

Ladislav Hagara | Komentářů: 1
6.12. 12:00 | Zajímavý projekt

Projekt Termbox umožňuje vyzkoušet si linuxové distribuce Ubuntu, Debian, Fedora, CentOS a Arch Linux ve webovém prohlížeči. Řešení je postaveno na projektu HyperContainer. Podrobnosti v často kladených dotazech (FAQ). Zdrojové kódy jsou k dispozici na GitHubu [reddit].

Ladislav Hagara | Komentářů: 26
6.12. 11:00 | Bezpečnostní upozornění

Byly zveřejněny informace o bezpečnostní chybě CVE-2016-8655 v Linuxu zneužitelné k lokální eskalaci práv. Chyba se dostala do linuxového jádra v srpnu 2011. V upstreamu byla opravena minulý týden [Hacker News].

Ladislav Hagara | Komentářů: 2
5.12. 22:00 | Komunita

Přibližně před měsícem bylo oznámeno, že linuxová distribuce SUSE Linux Enterprise Server (SLES) běží nově také Raspberry Pi 3 (dokumentace). Obraz verze 12 SP2 pro Raspberry Pi 3 je ke stažení zdarma. Pro registrované jsou po dobu jednoho roku zdarma také aktualizace. Dnes bylo oznámeno, že pro Raspberry Pi 3 je k dispozici také nové openSUSE Leap 42.2 (zprávička). K dispozici je hned několik obrazů.

Ladislav Hagara | Komentářů: 6
5.12. 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 50
5.12. 06:00 | Zajímavý článek

I letos vychází řada ajťáckých adventních kalendářů. QEMU Advent Calendar 2016 přináší každý den nový obraz disku pro QEMU. Programátoři se mohou potrápit při řešení úloh z kalendáře Advent of Code 2016. Kalendáře Perl Advent Calendar 2016 a Perl 6 Advent Calendar přinášejí každý den zajímavé informace o programovacím jazyce Perl. Stranou nezůstává ani programovací jazyk Go.

Ladislav Hagara | Komentářů: 10
3.12. 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 17
3.12. 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (23%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 788 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: Bash a odstranění neviditelných znaků

Zdeněk Zámečník avatar 24.4.2009 20:58 Zdeněk Zámečník | skóre: 26
Bash a odstranění neviditelných znaků
Přečteno: 476×

Začínám doslova šílet, protože už několik hodin trávím nad hledáním jedné chyby. Používám na dohled nad servery Zabbix. Napsal jsem si v bashi skript pro posílán sms, který mi spolehlivě fungoval....než jsem jej začal používat právě v Zabbixu.

Věc se má tak, že Zabbix pošle alert skriptu nazývaným sms-courier a to tímto způsobem:

sms-courier 999000999 "router-plzen" "Host is down"

Přičemž to, co zde výše popisuji je reálný příkaz až na zaměněné tel. číslo. Sms-courier už se jen postará o odeslání přes bránu operátora. Pokud jej provedu na příkazové řádce nebo použiji v jiném skriptu, tak mi smska přijde. Jakmile ale tento (úplně ten samý) příkaz vygeneruje a vykoná Zabbix, nic se nestane.

Přišel jsem na to, že za to tak trochu v sms-courieru může tato řádka:

message=$(echo "$2 : $3" | sed 's/ /%20/g;y/áÁéÉěĚčČďĎíÍóÓňŇřŘšŠťŤůŮúÚýÝžŽ/aAeEeEcCdDiIoOnNrRsStTuUuUyYzZ/')

Výstupem sedu je totiž v tento moment prázdný řetězec, což je přinejmenším divné. Tento příkaz nahrazuje mezery %20 a odstraňuje diakritiku.

Dokáže mi někdo vysvětlit, proč se to děje? Nepřijde mi ani trochu logické, že při nahrazování diakritiky v řetězci, kde žádná není, je výstupem prázdný řetězec (a to pouze pokud příkaz spouští zabbix).

Pokud v sms-courieru krok pro odstranění diakritiky vynechám, tak se sice zpráva odešle, ale pro změnu ji pak někde zahodí operátor. Vypadá to jako by byl řetězec v nějakém divném kódování nebo obsahoval neviditelné znaky.

Zkoušel jsem řetězec před protažením výše zmíněným sedem zpracovat také těmito příkazy:

sed 's/.$//'
sed 's/\r//'
sed 's/[^a-zA-Z]*//g')
tr -d '\a\b\f\n\r\t\v'

Ale bezúspěšně. Vždy mě čeká prázdný řetězec. Dokáže mi někdo poradit?

Předem díky za jakoukoliv myšlenku...


Řešení dotazu:


Odpovědi

24.4.2009 21:44 cronin | skóre: 48
Rozbalit Rozbalit vše Re: Bash a odstranění neviditelných znaků
Aky intrepreter je uvedeny na zaciatku skriptu? sh, bash? Je v danom systeme sh hardlink na bash (typicky Linux), alebo ten system skutocne obsahuje sh (typicky BSD)? Este mi napada, ci nahodou "vsetci ostatni" nespustaju sms-courier "priamo", zatial co Zabbix zavola "sh sms-courier" alebo podobne, cim predhodi tento skript inemu interpreteru.

Ak je mozne vidiet vystup pri spusteni zo zabbixu, odporucam pouzit "ladiace ficury" shellu; interpreteru na prvom riadku je mozne podhodit parametre:
#! /bin/sh -v
zobrazi kazdy prikaz pred spustenim tak, ako by bol spusteny, a
#! /bin/sh -x
urobi to iste, ale prikazi sa vypisu po aplikovani aliasov, substitucii a expanzii. Tak je mozne vidiet co sa skutocne spusta.
Zdeněk Zámečník avatar 24.4.2009 22:02 Zdeněk Zámečník | skóre: 26
Rozbalit Rozbalit vše Re: Bash a odstranění neviditelných znaků

Sms-courier je napsán pro bash. Používám Debian Lenny, kde je symlink sh>bash, takže v tom problém nebude. Bohužel ten výstup, který to dělá s parametrem -x nebo -v, pokud jej spouští zabbix, vidět nemohu.


 

Zdeněk Zámečník avatar 24.4.2009 21:45 Zdeněk Zámečník | skóre: 26
Rozbalit Rozbalit vše Re: Bash a odstranění neviditelných znaků

Začíná to pro mě být čím dál větší záhada, protože pokud alert "Host is down" pošlu do souboru tímto způsobem:

#!/bin/bash
echo $1 > output

a potom provedu:

#!/bin/bash
sed 'y/áÁéÉěĚčČďĎíÍóÓňŇřŘšŠťŤůŮúÚýÝžŽ/aAeEeEcCdDiIoOnNrRsStTuUuUyYzZ/' output

..tak je výstup v pořádku

ALE pokud to celé udělám v rámci jednoho skriptu, tak je výstup opět prázdný! To je už je mimo mé chápání.

24.4.2009 21:58 cronin | skóre: 48
Rozbalit Rozbalit vše Re: Bash a odstranění neviditelných znaků
Mozes sem dat minimalnu verziu skriptu, ktora nefunguje? Ja som to skusil takto:
[babjak][~/tmp/bash][21:52:32] cat together.sh
#! /usr/local/bin/bash

message=$(echo "$2 : $3" | sed 's/ /%20/g')

echo "'$message'"
[babjak][~/tmp/bash][21:53:03] ./together.sh 999999 "Router-Plzen" "Host is down"
'Router-Plzen%20:%20Host%20is%20down'
[babjak][~/tmp/bash][21:53:41] 
co sa zda byt ok, ale asi som to prilis zjednodusil. Mimochodom, pocas pisania toho skriptu sa mi stalo, ze v prvom prikaze som mal napsane meno premennej "mesage" (chyba jedno s), ale v druhom prikaze uz spravne "message". Tym padom som v druhom prikaze vypisoval nedefinovanu premennu a dostal som ... nic. Nemozes mat aj Ty niekde nejaky blby preklep? Clovek to po sebe jednoducho nevidi, vzdy precita to co tam ma byt, nie to co tam v skutocnosti je.

Zdeněk Zámečník avatar 24.4.2009 22:18 Zdeněk Zámečník | skóre: 26
Rozbalit Rozbalit vše Re: Bash a odstranění neviditelných znaků

Ten skript právě funguje, ale pokud do něj parametry předává Zabbix, výstup je prázdný. Pokusím se to demonstrovat, co nejjednoduššejí. Jsem si téměř jist, že nikde nemám chybu, protože to by to pak nefungovalo takto:

 

#!/bin/bash
phone=$1
host=$2
echo "$phone $host" > /cbin/input
echo "$phone $host" | sed 'y/áÁéÉěĚčČďĎíÍóÓňŇřŘšŠťŤůŮúÚýÝžŽ/aAeEeEcCdDiIoOnNrRsStTuUuUyYzZ/' > /cbin/output

 

Pokud tento skript zavolám skript 999 router-plzen, tak se do do obou souborů uloží totéž: 999 router-plzen.

Pokud jej zavolá Zabbix, tak je sice v souboru input 999 router-plzen, ale soubor output je prázdný.

24.4.2009 22:36 cronin | skóre: 48
Rozbalit Rozbalit vše Re: Bash a odstranění neviditelných znaků
Hmmmm... weird environment. Ak je to tak, potom mi to pripada, akoby Zabbix nevedel spustit sed, napr. preto, lebo ho nema v PATH. Skusil by som dve veci, kazdu osobitne. 1) do /cbin/output presmerovat aj chybovy vystup a 2) uviest plnu cestu k sed-u; echo spustit ide aj zo zlym environmentom, lebo sa pouzije built-in verzia.
Zdeněk Zámečník avatar 24.4.2009 23:04 Zdeněk Zámečník | skóre: 26
Rozbalit Rozbalit vše Re: Bash a odstranění neviditelných znaků

To mě ani nenapadlo, ale bohužel to cestou k sedu není. Zadal jsem ji celou a výsledek stejný.

S tím přesměrováním výstupu to byla velmi dobrá myšlenka. Mimochodem nevíte, jak přesměrovat stderr až uvnitř skriptu?

/bin/sed: -e expression #1, char 94: strings for `y' command are different lengths

Což zní zvláštně. Vypadá to, jako kdyby sed v případě, kdy jej spuští zabbix, "neviděl" některá ta písmena s diakritikou, která má nahradit, ale proboha proč...

24.4.2009 23:06 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Bash a odstranění neviditelných znaků
Ano tohle chybovou hlášku jsem právě taky viděl -- napadlo mne že by mohl být problém s diakritikou tak jsem zkusil sed 'y//abc/'. Ale jak k tomu zabbix přijde nevím, možná něco s utf8?
24.4.2009 23:10 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Bash a odstranění neviditelných znaků
Uvnitř skriptu přesměrujete:
exec 2>/cbin/output.err
pokud byste to chtěl vrátit tak si ještě předtím musíte udělat zálohu:
exec 3>&2
exec 2>/cbin/output.err
necodelej
exec 2>&3

Zdeněk Zámečník avatar 24.4.2009 23:15 Zdeněk Zámečník | skóre: 26
Rozbalit Rozbalit vše Re: Bash a odstranění neviditelných znaků

Díky :)

Mnohem elegantnější než to moje spouštění nového procesu.

Zdeněk Zámečník avatar 24.4.2009 23:11 Zdeněk Zámečník | skóre: 26
Rozbalit Rozbalit vše Re: Bash a odstranění neviditelných znaků

Mám to!

export LC_ALL=cs_CZ.UTF-8

24.4.2009 23:12 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Bash a odstranění neviditelných znaků
Mimochodem se celkem nabízí otázka jak tedy přesně zabbix spouští ten skript? Zatím jsem to tu nikde v komentářích nenašel.
Zdeněk Zámečník avatar 24.4.2009 23:20 Zdeněk Zámečník | skóre: 26
Rozbalit Rozbalit vše Re: Bash a odstranění neviditelných znaků

Těžko říct, a v tom kódu by se to jen těžko hledalo. Podle mě jej spouští jako jakýkoliv jiný program v terminálu, ale proč nepoužije defaultně nastavenou českou lokalizaci, to nevím.

Mimochodem takto vypadá passwd:

zabbix:x:105:107::/var/run/zabbix-server/:/bin/false

24.4.2009 22:41 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Bash a odstranění neviditelných znaků
Nezapomeňte zkusit taky:
echo "$phone $host" | sed 'y/áÁéÉěĚčČďĎíÍóÓňŇřŘšŠťŤůŮúÚýÝžŽ/aAeEeEcCdDiIoOnNrRsStTuUuUyYzZ/' > /cbin/output 2>/cbin/output.err
ono na chybovém výstupu občas něco bývá.

Založit nové vláknoNahoru

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

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.