Portál AbcLinuxu, 16. července 2025 05:07


Dotaz: Bash - skript na otevirani pdf

21.3.2011 21:44 Drizz
Bash - skript na otevirani pdf
Přečteno: 481×
Odpovědět | Admin
Ahoj, chtel bych si udelat skrip na prohlizeni pdf, Melo by to vypadat tak, ze budu v nejake slozce, spustim skript a spusti se mi vsechny pdf ve slozce a dale skript projede vsechny slozky co jsou puvodni slozce a a otetevre vsechny pdf atd... Nevite jak na to, potrebuju nejak nakopnout

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

21.3.2011 21:54 pacholik | skóre: 10
Rozbalit Rozbalit vše Re: Bash - skript na otevirani pdf
Odpovědět | | Sbalit | Link | Blokovat | Admin
find složka -iname *.pdf -exec evince {} +
pokud používáš evince
printf 'čapí' | tee /dev/stdin
David Watzke avatar 21.3.2011 21:55 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Bash - skript na otevirani pdf
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nejsem si jistej, jestli tomu dobře rozumím. Chceš rekurzivně projet adresář a otevřít všechny PDF, který tam najdeš?
find . -iname '*.pdf' -print0 | xargs -0 okular
(případně můžeš okular nahradit za jiný prohlížeč)
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
21.3.2011 22:09 mich | skóre: 16
Rozbalit Rozbalit vše Re: Bash - skript na otevirani pdf
Osobně bych doporučoval použít ješte nohup, aby se ty soubory nezavřely po uzavření terminálu a taky &. Takže xargs nohup okular &.
je to teď v módě, na žive o tom furt píšou
21.3.2011 23:26 Drizz
Rozbalit Rozbalit vše Re: Bash - skript na otevirani pdf
Super, diky!!!

find . -iname '*.pdf' -print0 | xargs -0 okular funguje bajecne

find . -iname '*.pdf' -print0 | xargs nohup okular & hlasi chybu: xargs: POZOR: Na vstupu se objevil znak NULL. Není možné jej předat do seznamu argumentů. Nezamýšleli jste použít přepínač --null? nohup: výstup připojuji k „nohup.out“

Jeste bych se chtel zeptat co vlasne znamenaji prikazy a parametry: -iname , -print0 , xargs ,nohup

Diky!
21.3.2011 23:49 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Bash - skript na otevirani pdf

Problém je v tom, že ampersand interpretuje shell, ze kterého se spouští find. Zrovna před pár dny se tu přesně tento problém řešil.

Co se týká významu, co se zkusit podívat do manuálových stránek příslušných příkazů (find, xargs, nohup)?

23.3.2011 06:30 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Bash - skript na otevirani pdf
Zde zrovna tento problém nenastal, protože & není v příkazu pro find, ale za pajpou u příkazu xargs.
23.3.2011 08:14 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Bash - skript na otevirani pdf
To je úplně jedno. Stejně ten ampersand interpretuje ten shell, ze kterého se spouští find (a xargs) a vztahuje se k příkazu xargs, ne k jednotlivým okularům.
23.3.2011 09:51 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Bash - skript na otevirani pdf
Tento stav nastal, ale nenapadá mne proč by to měl být problém, pokud se použije okular, který umí otevřít víc pdf najednou.

Chápu že pro neznámý prohlížeč pdf je řešení obecně
find . -iname '*.pdf' -exec bash -c "okular3000 {} &" \;
což spustí na pozadí tři okular3000 (ovšem v novém shellu - nikoliv jako jobs v tom aktuálním), ale nevidím způsob, jak stejným způsobem spustit okular s více argumenty, krom spuštění "find na pozadí" nebo "xargs na pozadí" což dělá skoro totéž:
find . -iname '*.pdf' -exec okular {} \+ &
find . -iname '*.pdf' -print0 | xargs -O okular &
má to vedlejší efekt že na pozadí jako job běží xargs (okular běží na pozadí jako potomek xargs), ale nepovažuji to za problém, spíš kvituji že mi neběží tři okulary.

Find má ještě vedlejší efekt že když se vyčerpá počet argumentů tak čeká až okular zavřete a otevře zbytek, xargs defaultně také, ale lze mu vnutit třeba -N 1000, což by na otevření pár milionů pdf mohlo stačit :)

Nebo máte nějaké lepší řešení jak spustit na pozadí okular s více argumenty, aniž by jako rodič běžel find či xargs?
23.3.2011 11:09 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Bash - skript na otevirani pdf
Tento stav nastal, ale nenapadá mne proč by to měl být problém, pokud se použije okular, který umí otevřít víc pdf najednou.

V tom problém není. Problém je v tom, že některé příspěvky v diskusi vyznívaly tak, jako by to automaticky fungovalo s jakýmkoli prohlížečem a ampersand zajišťoval paralelní spouštění jednotlivých příkazů. Některé pak dokonce tvrdily zcela nepravdivé věci (jako např. ty nesmysly o fungování nohup). Proto jsem se to pokusil uvést na pravou míru.

22.3.2011 00:00 pacholik | skóre: 10
Rozbalit Rozbalit vše Re: Bash - skript na otevirani pdf
i s tím nohup používej -0
find . -iname '*.pdf' -print0 | xargs -0 nohup okular &
-iname vyhledává podle jména a nerozlišuje velká-malá písmena

-print0 vypíše výsledky, mezi ně dá znak null

xargs a nohup jsou jiné programy, xargs vytváří příkazy ze stdin a nohup spouští program na pozadí tak aby ho nešlo ukončit ctrl-c

man find

man xargs

man nohup
printf 'čapí' | tee /dev/stdin
22.3.2011 01:19 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Bash - skript na otevirani pdf
Na jeden příspěvek trochu moc nepravd a nepřesností… To, co popisujete, bude fungovat jen díky tomu, že stačí spustit jeden okular a dát mu všechna jména jako parametry (pokud jich nebude moc). Příkaz nohup nespouští program na pozadí (jak si lze snadno ověřit), ale funguje jako wrapper, díky kterému je ignorován signál HUP (odtud jeho název), zatímco kombinace kláves Ctrl-C způsobí poslání signálu INT, takže tou program bez problémů ukončíte (pokud ji neignoruje on sám, ale pak ho zase neukončí ani bez nohup).
22.3.2011 09:05 pacholik | skóre: 10
Rozbalit Rozbalit vše Re: Bash - skript na otevirani pdf
A ? Mě se to taky víc líbí s parametrem -i.

To sem věděl, ale vím že je někdy lepší moc to nekomplikovat :)
printf 'čapí' | tee /dev/stdin
23.3.2011 06:33 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Bash - skript na otevirani pdf
xargs: POZOR: Nezamýšleli jste, čistě náhodou, že se tak ptám, použít přepínač --null?

Neignorujte xargs, chce si s vámi povídat, je to taky jen program a má své potřeby a city :D
23.3.2011 08:24 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Bash - skript na otevirani pdf

Aneb jak občas říkám na školeních účastníkům: chce-li člověk spravovat Linux, měl by se naučit dvě věci, které ho praxe s Windows odnaučí:

  • Má smysl číst chybová hlášení.
  • Má smysl číst dokumentaci.
21.3.2011 23:27 Drizz
Rozbalit Rozbalit vše Re: Bash - skript na otevirani pdf
omlouvam se za spatne formatovani ale v nahledu to tak nebylo
23.3.2011 06:37 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Bash - skript na otevirani pdf
Osobně bych doporučoval použít ješte nohup, aby se ty soubory nezavřely po uzavření terminálu.

Jaký shell používáte, že vám implicitně posílá SIGHUP? Většina těch současných to nedělá a nohup je zbytečné, protože nezavřené IO také většině aplikací nevadí. Akorát se pak zbytečně zapisuje na disku a všude se válí nohup.out.
23.3.2011 12:41 mich | skóre: 16
Rozbalit Rozbalit vše Re: Bash - skript na otevirani pdf

Jsem z té otázky poněkud zmatený. Jako shell používám bash, stejně jako autor otázky.

SIGHUP nerozesílá bash, ale emulátor terminálu. Bash jej pouze rozešle dále pokud jej dostane (je to napsáno i v manu). Jako emulátor terminálu používám konsoli z KDE. Zkoušel jsem teď i xterm a ten SIGHUP zasílá taky. Projel jsem to i stracem a SIGHUP tam byl.

je to teď v módě, na žive o tom furt píšou
23.3.2011 13:47 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Bash - skript na otevirani pdf
Máte pravdu, přehlédl jsem že říkáte "při ukončení terminálu". Osobně terminál nikdy neukončuji (neposílám SIGTERM či SIGKILL a neklikám na křížky apod.), ukončuji v něm běžící shell (slovy exit či spíš CTRL+D, asi zvyk z ssh sessions). S ohledem na shopt huponexit = off (to je to co jsem říkal že je u shellů obvyklé) bash SIGHUP sám nepošle, a konsole pak také ne, a procesy na pozadí nic nedostanou a běží dál, zdědí je init. Pokud terminál ukončíte SIGTERM či SIGKILL pak ano, bash přepošle signály co dostane dál a nohup má smysl.

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.