Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Uran 31 Března 2009, 10:06:37

Název: ladeni skriptu globalne
Přispěvatel: Uran 31 Března 2009, 10:06:37
Experimentuji z bashem a v pripade skriptu bych rad vedel co vlastne provedou.

mam jednoduchy skript ladeni.sh:

Kód: [Vybrat]
#!/bin/bash

mkdir asdfgh

Cilem bylo aby se vypsalo jen to co se bude provadet.

Zkusil jsem prikaz:
Kód: [Vybrat]
$bash -x ladeni.sh
Vysledek byl ovsem jiny nez jsem ocekaval.

Kód: [Vybrat]
bash-3.2$ bash -x ladeni.sh
+ mkdir asdfgh
Navic se adresar vytvoril.

Jde nejak prepinacem bez zasahu do vlastniho skriptu dosahnout toho aby se dane prikazy vypsali a neprovedli?

Dekuji za odpoved.
Název: Re: ladeni skriptu globalne
Přispěvatel: nettezzaumana 31 Března 2009, 10:19:12
a cos cekal .. ?? oLoL
! `man bash`
Název: Re: ladeni skriptu globalne
Přispěvatel: Uran 31 Března 2009, 10:42:40
No do man stranky jsem se koukal. Anglicky moc neumim a nejak jsem to v zaplave dat nenasel. Zkousel jsem v googlu ruzne varianty "bash+ladění+debug" ap., ale nebyl jsem z toho nejak moudry.

Zajimalo by me jestli jde nejak jednoduse tuto situaci resit?
Název: Re: ladeni skriptu globalne
Přispěvatel: premet 31 Března 2009, 10:44:41
http://www.ss64.com/bash/set.html (http://www.ss64.com/bash/set.html), myslím, že parametr -noexec by měl být to co hledáš.
Název: Re: ladeni skriptu globalne
Přispěvatel: Uran 31 Března 2009, 11:02:22
Tak jsem se asi trochu zamotal zkusil jsem nasledujici a presto mi to adresare zacinajici 1* smazalo.

ladeni.sh:
Kód: [Vybrat]
#!/bin/bash
rm -rf 1*

Kód: [Vybrat]
$sh -a ladeni.sh set -o noexec set -a
Název: Re: ladeni skriptu globalne
Přispěvatel: nettezzaumana 31 Března 2009, 11:09:53
umh .. pouziva se to aka ::

set -nx command
Název: Re: ladeni skriptu globalne
Přispěvatel: arrange 31 Března 2009, 11:16:13
bash -nv ladeni.sh
Název: Re: ladeni skriptu globalne
Přispěvatel: Uran 31 Března 2009, 11:26:41
Tak jsem to taky nasel tady. http://www.faqs.org/docs/abs/HTML/debugging.html .

Vysledek je logicky, ale asi jsem se na zacatku spatne vyjadril. Krome vypisu chyb bych chtel videt stejne jako kdyz misto

Kód: [Vybrat]
$rm -rf 1* pouziji

Kód: [Vybrat]
echo rm -rf 1*aniz bych musel pred kazdy prikaz psat to echo

Jde mi o to ze casto mazu/prejmenovavam vice polozek a pak je uzitecne vedet co se prejmenovava.
Prikaz
Kód: [Vybrat]
set -nx ladeni.sh mi neukaze soubory co by se meli mazat.

Název: Re: ladeni skriptu globalne
Přispěvatel: premet 31 Března 2009, 11:30:33
Tak si zapni ukecanej mod u rm → rm -rfv
Název: Re: ladeni skriptu globalne
Přispěvatel: arrange 31 Března 2009, 11:50:44
echo Ti jen "expanduje" ten výraz 1*, takže by úplně stačilo echo 1*, pokud Ti jde jen o zobrazení souborů. Jinak to pro kontrolu běhu programu nefunguje, např. echo ls vypíše jen ls : )
Název: Re: ladeni skriptu globalne
Přispěvatel: Uran 31 Března 2009, 12:17:02
Jasny ale to bude jen u toho rm. Ja pouzivam jine programy.

Porad mi neni jasne proc se nasledujici skript ladeni.sh:

Kód: [Vybrat]
#!/bin/bash


sssssss
dfgfgfgf
gfdggf
dgdgd
gdgdf

echo ahoj
rm -rf 1*

Vypis adresare kde se spousti skript:
Kód: [Vybrat]
bash-3.2$ ls
erwerew  ladeni.sh  ladeni.sh~  1fgrthghjgjg  1fsfsfsf  1oljvvxdss

Poskytne:

1.
Kód: [Vybrat]
bash-3.2$ bash -n ladeni.sh
bash-3.2$

Mel by prece vypsat nejake chyby (neexistujici sssss .....)?

2.
Kód: [Vybrat]
bash-3.2$ bash -nx ladeni.sh
bash-3.2$
By mel ukazat ahoj+ nejake chyby?


Název: Re: ladeni skriptu globalne
Přispěvatel: nettezzaumana 31 Března 2009, 13:06:13
umh .. jak ti muze bash vypsat neexistujici prikaz kdyz ho ani nezkusi provest ..

pokud se ti ma vypsat obsah scriptu tak na to pouzij `cat script.sh` ;)
Název: Re: ladeni skriptu globalne
Přispěvatel: Uran 31 Března 2009, 14:28:35
Sorry, ale uz jsem nejak mimo - nechapu jak to myslis(te).
Tak posledni pokus. Chtel jsem abych mel neco jako "stroj casu" tj. provedl bych nejaky skript (mazani, prejmenovani, konvertovani .....) a pak v pripade, ze se mi to nelibi mohl vzit zmeny zpet.

Predpokladal jsem, ze to pujde jednoduse nejakym prepinacem, ktery zapricini stejny vypis jako by vypisoval ten skript, ale fyzicky by nemanipuloval se zdrojovymi daty. Nejak jak jsem zil porad v presvedceni, ze obdobne jako u rm existuje pro bash fce, ktera by tento ochrany  (proti me blbosti) mechanizmus umoznovala.


Tak posledni otazka: existuje nejaka takovato moznost?
Název: Re: ladeni skriptu globalne
Přispěvatel: nettezzaumana 31 Března 2009, 15:50:52
ne, musis (alespon tak to delam ja) napsat skript v debugging modu a po ujisteni ze vse bezi jak ma ho nalezite upravit aka ::

if test -d $foo; then
  echo 'rm -rv $foo &>/foo.log';
fi
Název: Re: ladeni skriptu globalne
Přispěvatel: Martin Kiklhorn 31 Března 2009, 16:45:13
Tak posledni pokus. Chtel jsem abych mel neco jako "stroj casu" tj. provedl bych nejaky skript (mazani, prejmenovani, konvertovani .....) a pak v pripade, ze se mi to nelibi mohl vzit zmeny zpet.
Jaký je reverzní příkaz k rm? To je věc diskového/souborového systému.
Nějaké možnosti "stroje času" máte.
snapshoty nad LVM2
snapshoty nad ZFS -v Linuxu není v jádře, ale přes fuse stejně jako NTFS. (a časem snad (http://brainstorm.ubuntu.com/idea/16255/) i grafický time-slider (http://blogs.sun.com/erwann/entry/zfs_on_the_desktop_zfs) viz screencast (http://))