Új hozzászólás Aktív témák
-
dabadab
titán
Akkor koltozzunk at ide a linuxos topikbol...
DRM is theft
-
dabadab
titán
Konkretan hol akadtal el?
Egyreszt megfelelo jogosultsaggal kell rendelkezned azzal, hogy tudd irni ezt a file-t (alapbol csak a root szokta ezt tudni), utana meg fogod barmelyik kedvenc (unixos) szovegszerkesztodet, es azzal beleirod. Ha csak vi van, es nem boldogulsz vele, akkor szoljDRM is theft
-
-
dabadab
titán
-
dabadab
titán
#!/bin/sh
tac ''$@''
Bocs Mondjuk nem irtad, hogy pontosan mivel is kellene (lehet, hogy siman builtinekkel is ossze lehetne hozni), de itt van pl egy sed-es megfejtes:
#!/bin/sh
for FILE in ''$@'' ; do
if [ -f ''$FILE'' ] ; then
sed '1!G;h;$!d' ''$FILE''
else
echo ''$FILE nem sima file (hanem valami mas vagy nem is letezik)'' >/dev/stderr
fi
done
[Szerkesztve]DRM is theft
-
dabadab
titán
Nem teljesen. A bash az eredeti sh tovabbfejlesztett valtozata, sokkal tobb feature-rel. Eleg sok modern rendszeren a /bin/sh igazabol link a bashra, viszont erre vonatkozolag semmi garancia nincs, igy ha parancsvegrehajtonak az sh-t jeloli meg az ember, akkor nem illik bash feature-oket hasznalni.
A sed meg, roviden elmagyarazva, egy stream editor Vagyis arra jo, hogy ha van egy streamed, akkor azon, a sajat scriptnyelven megadott szerkeszteseket vegre tud hajtani - a gyakorlatban az esetek nagy reszeben search'n'replace feladatokra hasznaljak, de ennel sokkal tobbet tud.DRM is theft
-
dabadab
titán
"ha a script sima sh-val fut, akkor futnia kell azzal is, amire a /bin/sh mutat, barmi is legyen az"
Viszont ez nem kommutativ relacio, vagyis ha nalad a /bin/sh fedonev alatt futo bashon fut, az nem jelenti azt, hogy barmilyen sh--kompatibilis shellen is futni fog. (Mondjuk ugy remlik, hogy konkretan a bash ujabb verzio figyelnek erre, es ha /bin/sh neven hivja meg az ember, akkor az extra bashes funkciokat kikapcsolja - de erre azert nem epitenek.)
DRM is theft
-
dabadab
titán
válasz Votyesz13 #492 üzenetére
Kb valami ilyesmi kellene neked (az, hogy a while feltetele a read, arra jó, hogy end-of-file (ctrl+D vagy tényleges eof, ha pl egy pipe-ból jön az input) esetén is megszakadjon a ciklus):
function read_line()
{
while read LINE ; do
if [ -z "$LINE" ] ; then
return
fi
echo "--- $LINE ---"
done
}DRM is theft
-
dabadab
titán
"& kapcsolatnál ha minden igaz, akkor csak akkor megy tovább amikor az előtte levő sikeresen lefutott igaz?"
Egeszen pontosan csak akkor, ha az elozo parancs exit levelje 0 volt. Az osi unixos szokas, hogy ha rendben lefut, akkor ez nulla, ha meg nem, akkor nem nulla, viszont pl. a sajat scripteknel figyelned kell erre (a shell scriptek a legutolso futtatott parancs exit leveljet kapjak meg, es ha pl. ez egy echo "hiba tortent" (ami persze szepen le fog futni es 0-t ad vissza), akkor utana be kell raknod pl. egy exit 1 utasitast). Egyebkent teljesen jol hasznalhato konstrukcio, pl. az unzip x.zip && rm x.zip az egyik kedvencem
A levelezeshez meg vmi olyasmi kellene, hogy uuencode file.bin | mail -s subject akarki@akarhol.org
[ Szerkesztve ]
DRM is theft
-
dabadab
titán
"nekem sima && elválasztóval nem ment a dolog."
Azert nem, mert a masodik parancsot csak akkor hajtja vegre, ha az elso futasa befejezodott (es nullat adott vissza), szoval ez igy tenyleg nem fog menni, mert az ssh addig fut, amig el a tunnel. Igazan gyors megoldast nem tudok ra javasolni, a maceras az lenne, hogy eloszor inditsd el a tunnelt a hatterben, vard meg, amig lesz valami (kiepul a tunnel vagy hiba miatt kilep az ssh) es utana inditsd el a vnc-t.
Egyebkent tunnelezeshez javaslom az autossh-t, ugyanis az ssh kapcsolatok meg szoktak halni. Fogalmam sincs, hogy miert, de elobb-utobb lehalnak.szerk: hoppa, a -f kimaradt nalam, akkor vissza az egesz
[ Szerkesztve ]
DRM is theft
-
dabadab
titán
sed 's/^.*\.\([^\.]*\)$/\1/'
Ez fogja a komplett sort (a ^ a sor eleje, a $ meg a sor vége), megkeresi benne a legutolsó olyan részt, ami egy pont után jön és nincs benne pont, és a cserével a komplett sort lecseréli erre a kis részre (a pontokat escape-elni kell, mivel az alapban joker karakter (ahogy az a legelső előfordulásakor látható is) meg a sima zárójeleket is, mert azokat alapból sima karakternek veszi a sed, a szögleteseket viszont nem, mert azok alapból kontrollkarakterek).
[ Szerkesztve ]
DRM is theft
-
dabadab
titán
ls -ld $DIR |cut -c1-10
(ahol a DIR valtozoban van a konyvtar neve)
(#711) kraftxld:
c:\>get-acl c:\temp | fl
'get-acl' is not recognized as an internal or external command, operable program or batch file.
szerk: ja, hogy ez a shell nem volt eleg power[ Szerkesztve ]
DRM is theft
-
dabadab
titán
Azert nem talalod, mert az nem tudja: a mogrify ugy mukodik, hogy az eredeti file-t irja felul.
Ket dolgot tehetsz: mogrify helyett a convertet hasznalod, aminek meg lehet adni a kimeneti file nevet (es akkor az eredetin tul lesz egy uj file-od is) vagy pedig egy mv paranccsal magad nevezed at a file-okat.DRM is theft
-
dabadab
titán
Felhívnám a kedves újoncok figyelmét, hogy ez továbbra sem az "Írd meg helyettem a házifeladatomat" topik
Ha valahol elakadtok, nyugodtan kérjetek segítséget, de arra várni, hogy valaki megírja helyettetek, nem nagyon érdemes.
DRM is theft
-
dabadab
titán
"a 'pwd' kimenetehez hozza kell fuzni a filenevet es kesz "
Egyreszt a filenev tulajdonkeppen lehet abszolut eleresi ut is, akkor dol a mutatvany (persze, egy egyszeru iffel kezelheto a helyzet, de az mar macera ), masreszt meg a realpath a kanonikus eleresi utat adja vissza, ami symlinkeknel lehet hasznos, pl:
db@cucumalac:~$ ls /home/db/x/../lib
mldonkey/ mythtv/
db@cucumalac:~$ ls /home/db/lib
ls: cannot access /home/db/lib: No such file or directory[ Szerkesztve ]
DRM is theft
-
dabadab
titán
Ha mar egyszer ugyis itt vagyok
for i in `find .` ; do blablabla ; done
Ez egeszen addig mukodik, amig a find altal visszaadott utvonalakban nincs szokoz (vagy tab vagy newline, pontosabban az $IFS valamelyik tagja). Ha van, akkor meghal a dolog. Igazan korrekt megoldast nem tudok mondani, van egyreszt ugye a find . -exec blabla {} \;, de ez csak akkor mukodik, ha a blabla vmi vegrehajthato file, shell functionoket viszont igy nem lehet meghivni (legalabbis kozvetlenul nem es nem tudok mondani semmi normalis trukkot ennek a megkerulesere).
Aztan el lehet sutni azt is, hogy find . | ( while read LINE ; do blabla "$LINE" ; done ), ez nagyreszt mukodik, kiveve, ha konkretan newline van a filenevben (ami mondjuk tenyleg nem gyakori jelenseg, de elofordulat - foleg, ha valaki direkt ki akarja hasznalni a scriptnek ezt a gyengeseget).[ Szerkesztve ]
DRM is theft
-
dabadab
titán
Ugy, hogy inkabb megis elsejen futtatnam
Egyebkent meg szerintem kozvetlenul sehogy sem lehet maganak a cronnak elmagyarazni, hogy az utolso napot szeretned, ezert kenytelen vagy trukkozni:
0 0 28-31 * * [ "$(/bin/date +%d -d tomorrow)" = "01" ] && /your/script.sh
(as seen on Google )DRM is theft
-
dabadab
titán
válasz CPT.Pirk #871 üzenetére
A /proc/bus/usb/ konyvtarban ott vannak az USB eszkozoket reprezentalo file-okat, azokat tudod bizergalni (megfelelo jogosultsaggal). Tisztan bashbol mondjuk a logaritmus nem fog menni, mar csak azert sem, mert a bash csak egesz szamokkal tud szamolni, szoval ahhoz kenytelen leszel kulso programot hivni (pl. ott a dc, a remek forditott lengyel jelolesevel).
DRM is theft
-
dabadab
titán
válasz bambano #1258 üzenetére
"majd feladod ezt az elvedet, ha pár mega ramos, márszáz MHz-es procival szerelt routerbe pakolod a programot."
Annak idejen, amikor shellt programozni tanultam, baromira orultem volna egy olyan eros, sok memorival szerelt gepnek, mint egy mai router (helyette volt 40 MHz meg 4 MB)
Az az egy szal cat nem oszt, nem szoroz, egy nagyon gyenge rendszeren meg ugyis busyboxot hasznal az ember, ott meg plane nem.[ Szerkesztve ]
DRM is theft
-
dabadab
titán
válasz szoke12 #1270 üzenetére
Az ==, amit hasznalsz, az igazan stringek osszehasonlitasara van, neked meg szamokat kell osszehasonlitanod, arra mas operatorok vannak, az egyenloseg:
if [ $NUM -eq 10 ] ; then
A komplett sor: -lt, -le, -eq, -ge, -gt (kisebb, kisebbegyenlo, egyenlo, nagyobbegyenlo, nagyobb)
vagyis ami neked kell az az, hogy
if [ $NUM -le 10 ] ; then[ Szerkesztve ]
DRM is theft
-
dabadab
titán
válasz SteveBeard #1471 üzenetére
Nem igazan ertem a kerdest. Ez mar most igy is tobb IP cimet is tud tiltani, csak fell kell oket sorolni az
etc/url_string.txt file-banDRM is theft
-
dabadab
titán
DEVICES="/dev/sda1 server:/dir/"
MAX_USAGE=5
NEED_TO_PANIC=0
for USAGE in `df $DEVICES | tail -n +2 | tr -s ' ' |cut -f5 -d' ' | tr -d '%'` ; do
if [ $USAGE -gt $MAX_USAGE ] ; then
NEED_TO_PANIC=1
fi
done
if [ $NEED_TO_PANIC -gt 0 ] ; then
echo 'PANIC!!!'
fi[ Szerkesztve ]
DRM is theft
-
-
dabadab
titán
Az egy dolog, hogy te nem teszel bele, de lehet benne es ez pont olyasmi, amire shellscript iraskor tenyleg figyelni kell.
"a peldad meg santit, mert a df nyilvan alapvetoen arra van, hogy EN megnezzem mennyi a szabad hely"
Nem hiszem, hogy "alapvetoen" erre lenne, hiszen ha shellscriptbol meg akarod nezni, hogy mi a helyzet a szabad hellyel, akkor mast nem nagyon tudsz hasznalni. En egyebkent a magam reszerol orulnek, ha az ilyen fancy tooloknak lenne valami rendes, gepi feldolgozasra alkalmasabb kimenete is (ahol pl. nem vagja le a hosszabb nevu device-ok nevenek a veget, hogy mast ne mondjak, vagy nem localefuggo az, hogy mit ir ki).
DRM is theft
-
dabadab
titán
válasz Speeedfire #1660 üzenetére
Igazan eleve nincsenek igazan exceptionok, igy aztan nagyon nincs is mit lekezelni
Ami van, azok a signalok, azokat meg (bash-ben, a tovabbiak konkretan arrol szolnak) a trap utasitassal lehet lekezelni, illetve a trap a signalokon kivul meg ismer par egyeb alkalmat is (EXIT - a script vegen, RETURN - return utasitaskor, DEBUG - kb. minden parancs elott, ERR - ha egy parancs nemnulla visszateresi erteket ad)
Valos eletbol vett pelda arra, hogy barhol lepjen ki a program, mindig umountolja a felmountolt fs-t (a 0 az EXIT "szignal"):
mount $INMNT
trap "umount $INMNT" 0[ Szerkesztve ]
DRM is theft
-
dabadab
titán
válasz bambano #1663 üzenetére
"ha az sqlldr meghal, akkor annak az exit státuszát kell lekezelni, arra a trapek szerintem nem jók."
De, tud ilyet is:
#!/bin/sh
trap "echo hiba!" ERR
echo true
# ennek nulla a visszateresi erteke
true
echo false
# ennek nemnulla a visszateresi erteke
false
echo vegeMondjuk a legtobb esetben tenyleg sokkal hasznalhatobb az "if [ $? -ne 0 ] ; then [ ... ] fi" szerkezet.
DRM is theft
-
dabadab
titán
printf "%d " ${$var[$i]}
->
eval "echo \${$var[$i]}"
illetve persze csinalhatod printf-fel is, ha azt szeretned, a lenyeg az eval meg a backslash, hogy azt meg ne akarja kierteklni az eval.
A $i ele is tehetsz \-t, de az vegulis mindegy, csak azt donti el, hogy az eval vagy az echo kiertekelesekor rakja be helyette a konkret szamot a shell.[ Szerkesztve ]
DRM is theft
Új hozzászólás Aktív témák
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen