Fórum Root.cz
Hlavní témata => Server => Téma založeno: PavelP 12. 09. 2013, 16:08:05
-
Ahoj, který zápis je správný?
aaa 2>/dev/null || echo "Příkaz \"aaa\" není v systému nainstalován!";
nebo
aaa 2>/dev/null | echo "Příkaz \"aaa\" není v systému nainstalován!";
Děkuji
PS: Jedná se o příkazovou řádku v linuxu
-
| - roura pro komunakaci mezi procesy
|| - logickej OR
Jinak takle vypada korektni kontrola.
hash aaa 2>/dev/null || {
echo "aaa is not installed."
exit 1
}
-
Ani jeden.
aaa 2>/dev/null || echo "Příkaz \"aaa\" není v systému nainstalován!";
Vypíše „Příkaz "aaa" není v systému nainstalován!“, pokud příkaz „aaa“ není nainstalován nebo běhu selže (tedy může být nainstalován)
aaa 2>/dev/null | echo "Příkaz \"aaa\" není v systému nainstalován!";
Vypíše „Příkaz "aaa" není v systému nainstalován!“, pokud příkaz „aaa“ v systému nainstalován je
Správné řešení je ten příkaz zkusit nalézt:
which aaa || echo "Příkaz \"aaa\" není v systému nainstalován!"
-
Správné řešení je ten příkaz zkusit nalézt:
which aaa || echo "Příkaz \"aaa\" není v systému nainstalován!"
Tak to bych nedoporucoval
viz http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script
-
Jinak takle vypada korektni kontrola.
hash aaa 2>/dev/null || {
echo "aaa is not installed."
exit 1
}
A co dělá ten hash? před tím příkazem?
-
je to build-in fce bashe (konkretni implementace vaseho shellu, teda aspon predpokladam, ze pouzivate BASH)
Jednoduse si nakesuje absolutni cestu k souboru. Dulezite je ale posledni veta v dokumentaci:
hash [-lr] [-p filename] [-dt] [name]
For each name, the full file name of the command is determined by searching the directories in $PATH and remembered. If the -p option is supplied, no path search is performed, and filename is used as the full file name of the command. The -r option causes the shell to forget all remembered locations. The -d option causes the shell to forget the remembered location of each name. If the -t option is supplied, the full pathname to which each name corresponds is printed. If multiple name arguments are supplied with -t, the name is printed before the hashed full pathname. The -l option causes output to be displayed in a format that may be reused as input. If no arguments are given, or if only -l is supplied, information about remembered commands is printed. The return status is true unless a name is not found or an invalid option is supplied.
[code/]
Je tu jasne definovane chovani, kdyz ne/najde soubor na FS.
-
Je tu jasne definovane chovani, kdyz ne/najde soubor na FS.
Můžeš mi prosím napsat na marttpet@seznam.cz ? Díky
-
A to chceš vědět, zda je daný binár v systému vůbec nainstalovaný, anebo jen zda je spustitelný s aktualním nastavenám PATH?
-
Postradas zaklady. Najdi si tady na root.cz nejaky serial o BASHi. Potom pochopis, ze uz ti psat vic nemusim.
-
A to chceš vědět, zda je daný binár v systému vůbec nainstalovaný, anebo jen zda je spustitelný s aktualním nastavenám PATH?
NN, to měl byt jen jako příklad, prostě nevím jak mít chyby pod kontrolou, jak při vytváření souborů, tak při spouštění vlastních funkci atd...
-
Vážně nikdo neví?
-
Ne, nikdo neví o co ti jde?
One size fits all řešení pro ošetření chyb prostě neexistuje a už vůbec ne v BASHi respektive jakémkoliv shellu.
-
A to chceš vědět, zda je daný binár v systému vůbec nainstalovaný, anebo jen zda je spustitelný s aktualním nastavenám PATH?
NN, to měl byt jen jako příklad, prostě nevím jak mít chyby pod kontrolou, jak při vytváření souborů, tak při spouštění vlastních funkci atd...
Přiznám se, ani teď jsem to moc nepochopil.
Ale vezmu to z opačeného konce:
základem všeho je to, že když proces (funkce/program/skript) skončí bez chyby, tak vrací 0. (řečeno hodně zjednodušeně)
A to se dá (a taky se to tak dělá) testovat ...
[/quote]Vážně nikdo neví?
Ví.
http://www.root.cz/knihy/bash-ocima-bohdana-milara/ (http://www.root.cz/knihy/bash-ocima-bohdana-milara/)
http://www.tldp.org/guides.html#abs (http://www.tldp.org/guides.html#abs)
-
kazdy prikaz vracia exit kod, ten sa da zistit z premennej '$?', ked bol prikaz uspesny vzdu vrati hodnotu 0
StudentEN@STUDENT1042-12 ~
$ ls -la xxx
ls: cannot access xxx: No such file or directory
StudentEN@STUDENT1042-12 ~
$ echo $?
2
StudentEN@STUDENT1042-12 ~
$ touch xxx
StudentEN@STUDENT1042-12 ~
$ ls -la xxx
-rw-r--r-- 1 StudentEN None 0 Sep 13 10:34 xxx
StudentEN@STUDENT1042-12 ~
$ echo $?
0
Tvoj priklad:
aaa 2>/dev/null
(( $? )) && echo "Příkaz není v systému nainstalován!"