Új hozzászólás Aktív témák
-
dabadab
titán
A sed {} paraméteréről nem sokat találtam
Mert az nem is a sednek szól, a
sed -n "${clip_id}p"
először átmegy a bashen, ami a${clip_id}
-t kicseréli a clip_id változó tartalmára. Viszont ennek így semmi értelme, mert ott a sed egy sorcímzést várna, a clip_id meg nem az, hanem valami string és azokatr a sorokat akarjuk, amiket az tartalmaz.
Cseréld ki a sedes részt egy grepre. A -F azért kell, hogy a clip_id-t ne akarja regexpként értelmezni, csak sima, szó szerinti stringkét, így pl. a pontok meg hasonlók nem okoznak bajt:total_time=$(echo "$lines" | grep -F "${clip_id}" |cut -d';' -f1)
-
dabadab
titán
válasz
bambano #2799 üzenetére
Ez nem fork bomb, ahhoz az kellene hogy rengeteg új processzt hozzon létre, de nem tesz ilyet: megvárja, amíg az első sftp befejeződik és csak utána indítja a másikat.
Ettől persze ez még így lassú meg nem hatékony, de nem fork bomb.
A klasszikus minimálforkbomb az pl ez (kedves errejárók, ne próbáljátok meg végrehajtani, mert lefagyhat tőle a gépetek)::(){ :|:& };:
-
dabadab
titán
Ez a GNU cut bugja: a -c-t pont úgy kezeli, mint a -b-t, vagyis annak ellenére, hogy elvileg kellene neki, valójában egyáltalán nem támogatja a multibyte karaktereket.
Szerencsére a bash maga is tud vagdosni stringeket és az rendesen csinálja:#! /bin/bash
for i in {0..49}
do
cat file | while read ; do
echo ${REPLY:$i:1}
done
done
exit
-
dabadab
titán
válasz
Archttila #2718 üzenetére
Mert megváltozott a html oldal felépítése.
Ezzel működik:
#!/bin/sh
value=$1
from=$2
to=$3
[ $# -lt 3 ] && { echo "Usage: $0 value source_currency target_currency"; exit 1;}
curl -s "https://www.xe.com/currencyconverter/convert/?Amount=$value&From=$from&To=$to" | sed -n 's/.*<p class="result__BigRate[^>]*">\([^<]*\).*/\1\n/p'
$ ./x.sh 10 EUR HUF
3,842.97 -
dabadab
titán
Az lesz a gond, hogy nem akarod igazán, spirituálisan blokkolod a működését
Nulladik lépésként nézd meg, hogy egyáltalán tényleg van-e installálva a "rename" és tényleg az-e, amire BoB gondolt.
$ rename -V
/usr/bin/rename using File::Rename version 1.10Ha ez stimmel, akkor lehet, hogy a filenevekre nem illik valamiért a pattern (mert pl. olyan karakter van benne, amit különleges karakterként kezel, nem literalként).
-
dabadab
titán
válasz
Fecogame #2709 üzenetére
Nem véletlen, hogy a nem guis programok progress barja tipikusan egysoros, mivel azt lehet különösebb varázslások nélkül megcsinálni.
Ami kell hozzá, az igazából a \r, ami a sor elejére ugrik, illetve az echohoz egy -n, hogy ne rakjon ki a kiírás végére egy \n-t, szóval ez így működik:for i in {1..10}; do
sleep 1 && echo -en "\rÉpp itt tartok: $i - minden oké."
doneHa ennél több kell, akkor igazán jó, kész megoldásról nem tudok shellhez. Van a dialog, ami igazából dialogokat tud kirakni és elég kötött, hogy hogyan néznek ki, annak van egy progressbox típusa.
Vagy nekiállhatsz te saját magad kurzorvezérléssel szenvedni, ami nem lehetetlen, de lehet, hogy annyit nem ér meg az egész. -
dabadab
titán
válasz
Fecogame #2675 üzenetére
ksh-ban szeretnék tört számokkal dolgozni
Igen, ezt hívják statisztikusnak.
Egyébként meg pont úgy működik, mint C-ben: ha sima egész számokat adsz meg, akkor integer aritmetikát használ, ha lát benne tizedespont (vagy vesszőt, éljen a lokalizáció
), akkor meg floating pointot:
db@jano:~$ ksh -c 'echo $((24832/23413.0))'
1.06060735488830991(Ja, és nincs floating point minden ksh-ban, verziótól függ)
-
dabadab
titán
Mert nem tömb, hanem egy string, aminek az elemei hiába vannak space-szel elválasztva, mivel idézőjelek között van, ezért nem bontja fel több stringre, hanem egyetlenként kezeli.
Ha kiveszed az idézőjeleket a fornál (meg a tömbös kezelést, ami mondjuk a működésbe nem zavar be, csak felesleges és megtévesztően néz ki), akkor menni fog - feltéve, hogy nincsenek olyan file-jaid, amiknek a nevében space van.
-
dabadab
titán
find /windows_share/ -type f -ctime -1 -iname '*gzw' -exec cp {} /linux_dir/ \;
Balról jobbra olvasva: megkeresi a /windows_share könyvtárban azokat a sima file-okat (tehát könyvtárat, pipe-ot, egyéb speciális file-t nem fog visszaadni), amiket maximum 1*24 órával ezelőtt hoztak létre és (figyelmen kívül hagyva a kis/nagybetű különbségeket) a '*.gzw' wildcardra illeszkednek és végrehajt rajtuk egy másolást a /linux_dir/-be.
-
dabadab
titán
válasz
Véreshurka #2615 üzenetére
Szerintem te nem ezt akarod
Ez csak akkor szinkronizálja bármelyik könyvtárat is, ha az összes ott van meg a .bac párja is - én azt gondolnám, hogy igazából az lenne a kívánt működés, hogy ha ott van egy könyvtár meg .bac párja, akkor azt szinkronizálja, függetlenül a többi könyvtártól.
Ennek szellemében:
function do_backup()
{
for DIR in "$@" ; do
BAC="$DIR.bac"
if [ -d "$DIR" ] && [ -d "$BAC" ] ; then
rsync -a --delete "$DIR" "$BAC"
fi
done
}
DIRS=("foo" "bar" "foo bar")
do_backup "${DIRS[@]}"
do_backup "foo" "bar" "foo bar"
do_backup /backup/dirs/*A három do_backup csak szemléltetésnek van (az első egy arrayban tárolja a szinkronizálandó könyvtárak neveit, a második simán felsorolja, a harmadik meg az adott helyen lévő könyvtárakat használja)
-
dabadab
titán
válasz
Fecogame #2609 üzenetére
Nincs ilyen, kézzel lehet szabályozgatni a tömböt:
#!/bin/bash
declare -a ARR
MAXLEN=4
function add_element()
{
ARR+=("$1")
len=${#ARR[@]}
if [ $len -gt $MAXLEN ] ; then
local -a tmp_arr
local i=$((len-$MAXLEN))
while [ $i -lt $len ] ; do
tmp_arr+=(${ARR[$i]})
let i++
done
ARR=(${tmp_arr[@]})
fi
}
for x in $(seq 8) ; do
add_element $x
echo ${ARR[@]}
done -
dabadab
titán
-
dabadab
titán
válasz
Fecogame #2522 üzenetére
Sima különbséggel:
#!/bin/bash
PREV=0
MAXDIFF=0
cat x.txt | ( while read NUM ; do
DIFF=$(($NUM-$PREV))
if [ $DIFF -gt $MAXDIFF ] ; then
echo $PREV $NUM $DIFF
MAXDIFF=$DIFF
fi
PREV=$NUM
done ) | tail -1A százalék macerásabb, mivel a bash csak integerekkel tud számolni, ott meg kell hívni valami külső programot számolni (dc, bc, akármi) illetve figyelni, hogy ne akarj nullával osztani.
-
dabadab
titán
válasz
Fecogame #2513 üzenetére
Valamiért nem működik, invalid context length argumenthibát ad a grep.
Azért, mert az iptablesben lévő -A-ról azt gondlja, hogy az neki szól
Erre az az általános megoldás, hogy az ember mond neki egy duplakötőjelet, onnan tudják a programok, hogy a továbbiakban nem lesz kötőjellel kezdődő paraméterük.grep -F -- "iptables -A INPUT -m state --state INVALID -j DROP"
Sajnos nem, break nélkül újra megkérdezi
De, a ;; breakeli a switchet, csak egyrészt bashban a switchet nem kell (és nem is lehet) expliciten breakelni, másrészt meg te ott a do-t akarod breakelni
Nem értem pontosan mire gondolsz itt.
Azt, hogy az ilyen scripteket nem a root home-jába illik telepíteni, hanm az /usr/local/sbin-be.
-
dabadab
titán
válasz
Fecogame #2504 üzenetére
Az iptableses részhez:
a grepnek van egy -F kapcsolója, ami kikapcsolja a regexpezést és akkor nem kellenek a backslashek, így aztán a komplett utasítást belerakhatod egy változóba, nem kell kétszer leírnod (mert előbb-utóbb biztos elírod az egyiket
)
szerk: ja, és uninstallkor ezeket szerintem illene kiszedni az iptablesből.
-
dabadab
titán
válasz
Fecogame #2504 üzenetére
A /var/spool/cron/crontabs/root első sora nálam (meg valószínűleg kb. minden unixon
) ez:
# DO NOT EDIT THIS FILE - edit the master and reinstall.
Ha crontabot akarsz installálni, akkor azt inkább úgy csináld, hogy rakj egy file-t az /etc/cron.d/-be. Nagyon ősi Linuxokon nem fog menni, de azokon lehet, hogy iptables sincs
-
dabadab
titán
válasz
Fecogame #2504 üzenetére
Az opcióválasztáshoz:
1. Tök jó lenne, ha ezt paranccsorból is meg lehetne adni, mert mondjuk .deb csomagot így elég nehéz csinálni belőle
2. Ez a file-os megoldás elég... khm
Egyrészt nem biztos, hogy működik (pl. mi van, ha read only fs-en van?), meg az se jó, hogy szó nélkül töröl file-okat, ráadásul olyanokat, amiknek nincs túl egyedi neve (ha mindenképpen file-t akarsz használni, akkor érdemes egyrészt a /tmp-ben csinálni, másrészt a filenévhez hozzácsapni legalább a PID-et, de akára hostname-et is - pl. /tmp/akarmi.$HOSTNAME.$$ )
Viszont erre nincs szükség, egyszerűen rakd bele egy változóba:
PS3='Please enter your choice: '
options=("Install" "Uninstall" "Verify" "Quit")
select opt in "${options[@]}"
do
case $opt in
"Install")
SEL=1 && break
;;
"Uninstall")
SEL=2 && break
;;
"Verify")
SEL=3 && break
;;
"Quit")
break
;;
*) echo "invalid option $REPLY";;
esac
done -
dabadab
titán
válasz
douggutaby #2495 üzenetére
Nekem sincs jobb ötletem. Van a Google Calendarban magyar ünnepnapos naptár, azt is használhatod, bár így elsőre a html-t bányászni egyszerűbbnek tűnik.
-
dabadab
titán
Van egy rakat ilyen tool, van browser extension, online szolgáltatás meg még ezer ilyet találsz, ha rákeresel arra, hogy "web crawler".
-
dabadab
titán
válasz
Fecogame #2450 üzenetére
Azért nem működik, mert ez a négy parancs egymás után, mindenféle kölcsönös interakció nélkül fut le.
Attól függően, hogy hogyan működik a python script, több megoldás is lehet.
A legegyszerűbb ez:
echo -en "$EMAIL\n$PW\n$PW\n" | python ./setup.py
Ha ez nem megy, akkor az expect jön képbe, az azért macerásabb (példa).
-
dabadab
titán
Egyeseknek semmi nem elég jó
A problémát két dolog okozza:
Egyrészt - és ez a kisebb baj - a sed buffereli az inputot és ez némi késést eredményez a kimenetében, ezt egy --unbuffered paraméterrel ki lehet kapcslni.
Másrészt - és ez a gond igazi gyökere - az rsync valójában egyetlen egy sort ír csak ki, mert a frissítések végén csak egy kocsivissza (\r) van, nem sorvége (\n)rsync -ah --info=progress2 /boot /media/WD/temp/rpi_shrink/DST_PART1 | tr '\r' '\n' | sed --unbuffered 's/ (.*)//' | tr '\n' '\r' ; echo
(A végén az echo azért kell, mert a második tr a tényleg a sor végén lévő \n-t is \r-re konvertálja és ezt pótolni kell valahogy)
-
dabadab
titán
Konkrétan kelleni ritkán fog, de a saját tapasztalatom fejlesztőként az, hogy az mindig hasznos, ha az ember össze tud dobni egy kis bash sciptet, mindig elő szoktak kerülni olyan dolgok, amiket pár sor seddel v awkval pillanatok alatt meg lehet oldani, vagy ha olyan a projekt, akkor kis indítószkripteket írni, ilyenek.
-
-
dabadab
titán
válasz
0xmilan #2329 üzenetére
Ha jól látom, akkor pythonnal, kézzel akarsz indítani egy service-t, amin egy másik rendszerszervíz dependel.
A legegyszerűbb és legkorrektebb megoldás az lenne, hogy akkor a pythonos webservert is berakod rendes szervíznek, itt van hozzá egy egyszerű guide: [link]. Ha szépen akarod megcsinálni, akkor a service-neve-nel beállítod azt is, hogy a pythonos szervízre dependeljen és akkor az előbbi magától elindítja az utóbbit is, ha az még nem fut. -
dabadab
titán
válasz
Fecogame #2318 üzenetére
"Az első és az utolsó command között 300%-os különbség van, az azért nem mindegy."
...egészen addig, amíg rá nem nézel, hogy ez 0,036 másodpercet jelent, ami kifejezetten a "mindegy" kategóriába tartozik
"Gyanítom, hogy nagyobb fájlnál is hasonló a sebesség különbség"
Igen, ott is 0,036 másodperc
Ami drága, az a processz indítás és a file nagyságától függetlenül mindenképpen két plusz process van, amik ugyanannyi idő alatt indulnak el. A pipe-on keresztüli kommunikáció valamennyi időbe tellik, de az se vészes, maga a grep sokkal időigényesebb.
-
dabadab
titán
-
dabadab
titán
válasz
Killerlaca #2288 üzenetére
"És azt bele lehet tenni, hogy menjen végig egy könyvtárban lévő összes fájlon és mindnél csinálja meg az általad írt műveleteket?"
A for pont ezt csinálja benne - tulajdonképpen mennyire vagy képben shellscript-ügyileg?
-
dabadab
titán
válasz
Killerlaca #2286 üzenetére
"Jól gondolom, hogy itt valami "if" "then" megoldást kellene használni?"
Nem.
"Köszönöm"
Szívesen!
Szóval átmozgatásnál a könyvtár nevét így kell kiszámolni, hogy fogod a file nevét és megcsinálod vele azt, amit itt leírtál (levágsz az elejéből meg a végéből) és az így kapott könyvtárba mozgatod. Kb vmi ilyesmi (ez levágja az első négy karaktert, a végéről meg az egy pontból és három karakterből álló kiterjesztést):
for filename in * ; do
dirname="$(echo $filename | cut -c5- | sed 's/\....$//)"
mv "$filename" "$dirname"
done -
dabadab
titán
válasz
Fecogame #2272 üzenetére
#!/bin/bash
for X in $(seq 0 15) ; do
HEX=$(printf '%X\n' $X)
mysqldump --opt -Q -u USER --password=PASSWORD DATABASE_${HEX} | gzip > /tmp/DATABASE_${HEX}.sql.gz
doneA for csinálja a ciklust - ez úgy működik bashban, hogy az in után lévő lista elemeit adja szépen sorban a ciklusváltozónak (esetünkben X-nek). Ezt a listát a seq paranccsal generálom, ez annyit tud, hogy két (lebegőpontos) érték között (opcionálisan megadott lépésközzel) kiír számokat.
Mivel hexa számokat használtok, a következő sorban a decimális értékeket gyorsan át is konvertálom (a seqnak is meg lehet adni printf-stílusú formázást, de sajnos csak lebegőpontost, szóval ott ezt nem lehetett elsütni).
Ezek után nem maradt más, mint a konkrét parancs, amibe be van helyettesítve a hexa változó.
-
dabadab
titán
"érdemes ezen valahol csiszolni (timeout érték, ciklusba tenni, wget helyett ping/curl stb)?"
igen, nagyjából ez
a wget helyett egy icipicivel kevesebb sávszélességet használ mondjuk egy
ping -c 1 -w 1 google.com >/dev/null
(ez is exit statusszal üzen, szóval utána az if maradhat)
Meg persze be lehet rakni az egészet egy ciklusba és nem cronból indítani (gondolom percenként), hanem folyamatosan futtatni és belerakni a ciklus végébe egy "sleep 1"-et és akkor már másodpercenként tudja ellenőrizni a netet.
-
dabadab
titán
válasz
Fecogame #2178 üzenetére
Persze, ez tök alap shellscriptes működés.
A pipe az, amivel egyik parancs kimenetét a másikébe irányítod, de kb. valami ilyesmi kell neked (az "echo hello" az a parancs, amit lefuttatsz, a grep utáni hello meg az, amit keresel):
if [ -z "$(echo hello | grep hello)" ] ; then
echo nincs benne
exit 1
else
echo benne van
fi -
dabadab
titán
válasz
spammer #2156 üzenetére
A tapasztalat azt mutatja, hogy ezek a pipe-ok a valós életben gyakran módosulnak, bővülnek, stb.
Ha bármit módosítani kell rajta, vagy egy részét kell tesztelni, stb, akkor mindig sokkal egyszerűbb az, ha magukhoz a parancsokhoz nem kell hozzányúlni, hanem simán lehet toldani-vágni. -
dabadab
titán
válasz
olivera88 #2109 üzenetére
"Úgyhogy az első sor törölhető akkor ugye?"
Nem, ott meg kell adni a tokent, mert anélkül a jelek szerint nem megy, azért kapsz html file-t. Akkor azt visszarakom.
"Ezt hogy érted hogy size változó értékét felül írom? Mivel?"
A következő file méretével, amikor ott van egymás után sokszor a "size=" kezdetű sor, akkor minden sorban új értéket adsz a size-nak és csak a legutolsód ellenőrzöd.
"Amúgy nem így akartam megoldani, hanem úgy hogy szétbontom az összes fájl ellenőrzést, és berakom a letöltések után, nem mint most hogy a végén ellenőrzi az egészet csak."
Ami scriptet írtam, az így van, minden egyes file-t a letöltése után vizsgál meg, nem pedig egyben a végén.
"Meg ez hogy van beállítva? Hogy egyszerre töltse le az összes fájlt? Mert úgy nem lehet, vagyis lehet, de én fokozatosan akarom, mivel nem egyszerre frissülnek a szerveren a fájlok, hanem fokozatosan."
Vagyis várni akarsz az egyes file-ok letöltése után? Ha erről van szó, akkor azt a külső ciklusban gond nélkül megteheted:
for TO in 12 24 36 48 60 72 ; do
download_file "${TO}"
donehelyett az kell, hogy (ha pl. 10 percet akarsz várni):
for TO in 12 24 36 48 60 72 ; do
download_file "${TO}"
sleep 10m
done -
dabadab
titán
válasz
olivera88 #2107 üzenetére
Aha, ez így nagyon nem jó
Az alapvető hiba az, hogy a size változó függvényét simán felülírod anélkül, hogy az előző értékét vizsgálnád, aztán ha jó, akkor újra azonnal letöltöd, ha meg nem, akkor vársz és újra megnézed (az azóta nyilván változatlan file méretet
)
Megcsináltam belőle egy normális változatot (a tokent írd bele vissza, azt töröltem az eddigi hozzászólásaidból is, mert az szerintem nem publikus információ):
szerk: észrevettem benne egy kis hibát, javítottam
#!/bin/bash
# access token
TOKEN="__5yLVTdr-sGeHoPitnFc7TZ6MhBcJxuSsoZp6y0leVHU__"
# file size min and max values - if the file's size falls outside of this range it is considered faulty
MIN_SIZE="38797312"
MAX_SIZE="45088768"
# time range - how many hour's data a single file contains
RANGE=12
function download_file()
{
# end time
TO="$1"
# start time - it is calculated a little oddly
FROM=$((${TO}-${RANGE}))
if [ $FROM -gt 0 ] ; then
FROM=$(($FROM+1))
fi
# add leading zeroes if needed
FROM="$(printf "%02d" "${FROM}")"
RANGE="$(printf "%02d" "${RANGE}")"
# url of the data
URL="http://dcpc-nwp.meteo.fr/services/PS_GetCache_DCPCPreviNum?token=${TOKEN}&model=ARPEGE&grid=0.1&package=SP1&time=${FROM}H${TO}H&referencetime=$(date +'%Y-%m-%d')T${RANGE}:00:00Z"
# output file name
OUT_FILE="ARPEGE_SP1_${TO}H.grib2"
while true ; do
# get the file
wget "${URL}" -O "${OUT_FILE}"
# check the filesize
size=$(stat -c \%s "${OUT_FILE}" )
if [ $size -ge "${MIN_SIZE}" -a $size -le "${MAX_SIZE}" ] ; then
# size is OK, leave loop
break
else
# something went wrong, wait a little and retry
sleep 5m
fi
done
}
for TO in 12 24 36 48 60 72 ; do
download_file "${TO}"
done -
dabadab
titán
válasz
olivera88 #2105 üzenetére
A while-ok végén kimaradtak a done-ok, azt reklamálja.
A formázási lehetőség között van olyan, hogy "Programkód", kód beírásakor használd azt, mert az megőrzi a formázást meg a speciális karaktereket (szögletes zárójelek, meg zárójel elé tett kettőspontból sem lesz smiley).
-
dabadab
titán
válasz
Headless #1972 üzenetére
Erre a problémára az az általámos megoldás, hogy a kapcsolók után írsz egy dupla kötőjelet:
cat file | grep -- "$var"
Ez nem csak grepnél működik, hanem úgy általában a mindenféle command line tooloknál (az 1992-es POSIX.2 szabványban szerepel irányelvként, hogy ennek így kellene működnie).
-
dabadab
titán
válasz
marky mark #1958 üzenetére
És mi a kérdésed?
-
dabadab
titán
válasz
Keeperv85 #1935 üzenetére
(A saját scripteket ne az /usr/bin-be, hanem az /usr/local/bin-be rakd, oda valóak.)
"Nem tudom hogy kell hozzáférést adni ugyanis a signapk.jar-hoz így..."
Mármint mi a probléma: nem találja (írd oda a teljes útvonalat a filenevekhez) vagy más userek nem tudják olvasni a file-okat (ebben az esetben "chmod a+r <file>")
-
dabadab
titán
"a sed-el lecseréltem a "."-t vesszőre a file-ben"
Ahelyett inkabb ajanlanam a script elejere a kovetkezo sort:
export LC_NUMERIC="C"Ez fixen beallitja a locale-t egy mindenhol meglevo darabra, ahol tizedespont van, ha viszont fixen lecsereled a pontot vesszore, az nem fog mukodni akkor, ha pontot hasznalo locale-lel akarod futtatni.
"Nekem kerekítés nélkül kell."
Akkor vagd le a felesleges tizedesjegyeket mielott atadnad a printf-nek (a printf jelen esetben csak azert kell, hogy a kettonel kevesebb tizedesjegyet tartalmazo szamok vegere is odarakja oket, vagyis hogy az 5-bol 5.00 legyen)
X=4.12812
printf '%02.f\n' $(echo $X | sed 's/\(\...\).*$/\1/') -
dabadab
titán
Egeszen pontosan mit akarsz? Tenylegesen ilyen ertekre kerekiteni a szamot vagy csak kiiratni az elso ket tizedesjegyet vagy ket tizedesre kerekiteni es ugy kiiratni?
Ha az elso ketto az erdekes, akkor a printf a legegyszerubb (az elso a kerekites, a masik a kerekitve kiiratas):
X=4.4789
Y=$(printf '%0.2f' $X)
printf '%0.2f\n' $X -
dabadab
titán
válasz
beleszólok #1893 üzenetére
"Fájlnév esetében nem egyértelmű: ha idézőjelbe teszed és pl. * kerül a fájlnévbe, mert mondjuk több fájlban akarsz keresni, akkor kap(hat)sz egy hibát, hogy nem találja a fájlt, mert idézőjelek közt a wildcardokat nem bontja ki a shell."
Ez nem igy megy.
Abban igazad van, hogy az echo "*" egy csillagot fog kiirni, viszont itt nem errol van szo, az idezojelek kozott csak a valtozobehelyettesites zajlik le, a wildcardozas egy masik menet, ez mar megy:
FILE="*"
echo "$FILE"A lenyeg: tessek csak mindent idezojelek koze rakni.
-
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. -
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.
-
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 -
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).
-
-
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-ban -
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 -
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.
Új hozzászólás Aktív témák
- Sea of Thieves Premium Edition és Egyéb Játékkulcsok.
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- Eladó steam/ubisoft/EA/stb. kulcsok Bank/Revolut/Wise (EUR, USD, crypto OK)
- Új, bontatlan World of Warcraft gyűjtői kiadások
- Bitdefender Total Security 3év/3eszköz! - Tökéletes védelem, Most kedvező áron!
- BESZÁMÍTÁS! MSI B450M R5 5500 32GB DDR4 512GB SSD RTX 3060 12GB Rampage SHIVA Chieftec 600W
- BESZÁMÍTÁS! Gigabyte H370 i5 9500 32GB DDR4 512GB SSD RTX 2060 Super 8GB ZALMAN S2 TG be quiet! 650W
- 14" Dell Latitude laptopok: 5400, 5480, 5490, 7480, E7440, E7450 / SZÁMLA + GARANCIA
- Samsung Galaxy A52s 5G 128GB, Kártyafüggetlen, 1 Év Garanciával
- BESZÁMÍTÁS! 860W Fractal Design ION + 2 Platinum tápegység garanciával hibátlan működéssel
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged