- Több tucat gyorsító összeköthetőségét kínálja az Instinct MI400 sorozat
- Imádja az alteregókat az új AMD Software
- Csak úgy szórja a dollár milliárdokat adatközpontokra az Amazon
- Mexikó tisztázta a Google-t a monopóliummal kapcsolatos vádak alól
- Egyre csak fejlődik az AI, emberek tízezreit rúgja majd ki a BT
- Milyen pendrive-ot vegyek?
- TCL LCD és LED TV-k
- VR topik
- OLED, Mini-LED, IPS, VA, TN - melyik panelt válaszd 2025-ben?
- Kormányok / autós szimulátorok topikja
- Milyen monitort vegyek?
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Amlogic S905, S912 processzoros készülékek
- Hobby elektronika
- Milyen billentyűzetet vegyek?
Új hozzászólás Aktív témák
-
bambano
titán
válasz
Fecogame #2852 üzenetére
egyébként itt most az a feladat, hogy ezt az awk-s programot megjavítsuk, vagy az, hogy megoldjuk a problémát?
mert ha a problémát meg kell oldani, akkor először teszteld le, hogy a busyboxos printf tud-e ilyen formátumot, és ha igen, akkor kezdd azzal, hogy kihajítod az awk-t. -
tjsz
senior tag
válasz
Fecogame #2852 üzenetére
Sajnos erre is hibát ad.
-W version-re az egyik azt írja, hogy "Gnu Awk 3.1.3"
A másiknál pedig:
root@Router:/tmp/home/root# awk -W version
awk: warning: option -W is ignored
BusyBox v1.36.1 (2023-09-09 05:54:41 CEST) multi-call binary.Usage: awk [OPTIONS] [AWK_PROGRAM] [FILE]...
-v VAR=VALSet variable
-F SEPUse SEP as field separator
-f FILERead program from FILE
root@Router:/tmp/home/root# -
-
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. -
-
Headless
őstag
válasz
Fecogame #2675 üzenetére
ha nagyon érdekel a teljesítmény shellt miért nem felejted el? pl megcsinálhatod az egészet awk-val. Még lehet egy python is gyorsabb. vagy ha tényleg számít minden us akkor c++.
annó csináltam egy tesztet:
1-1000-ig vizsgáltam a számokat, hogy prím-e és a tisztán awk megoldás töredéke volt, mint a sima shell megoldásnak. -
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)
-
vargalex
félisten
válasz
Fecogame #2663 üzenetére
Ha tudod a tizedes jegyek számát, akkor:
echo | awk '{printf "%.13f", (100-0.11)*0.000025442/100}'
vagy a awk BEGIN-ben echo nélkül:
awk 'BEGIN {printf "%.13f", (100-0.11)*0.000025442/100}'
Természetesen, ha csak az általad írt kerekített érték kell, akkor a formátum a
"%.11f"
.
Nem értem, hogy miért használod a beágyazott AWK-t...
Egyébként az AWK programot sima aposztrófok közé szokás tenni, így nincs kavarodás a printf formátum leírójával. -
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 -
Headless
őstag
válasz
Fecogame #2581 üzenetére
tömbök meg azért nem a legjobbak shellben mert nem fog minden shellben működni az shell specifikus, de ha esetleg egy beépített eszközön akarod futtatni ahol javarészt busybox és ash van ott nem fog lefutni vagy akár ha bsd alatt. ott is lesznek különbséges persze nem lenne egy elfogadott tömbbrendszer de a legközelebb hozzá azzal vagyunk mint amit bambano írt.
-
bambano
titán
válasz
Fecogame #2579 üzenetére
a kérdés az, hogy így akarod megoldani a problémát vagy rendesen.
ha így, akkor nézd meg, hogy a bash hogy kezel tömböket.
ha rendesen, akkor kb. így néz ki:cat <<EOF
http prohardver
http ezmegaz
EOF | while read website; do curl ${website} | stb. ; done
az, hogy tesztbe teszed a kiértékelést, meg =1 meg hasonló bonyolítások, szintén felejtős. A grep rendesen adja vissza a kilépési kódját, tehát:
curl | grep && echo ok
-
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.
-
KrAt
veterán
válasz
Fecogame #2522 üzenetére
Egyszer csinaltam hasonlot, elkezdenem cut -d " " -f1 majd f2 stbstb parameterekkel szetszedni a szamokat, valtozokba berakni az egymas melletti szamokat, majd megszamolni a kulonbseget, es ha az nagyobb, mint az elozo kulonbseg, akkor azt is eltarolni egy valtozoban, ha nem, akkor tovabb az f2 f3, majd f3 f4, stbstb..
Biztos van szebb megoldas is, varjunk meg a tobbiekre
-
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
-
bambano
titán
válasz
Fecogame #2504 üzenetére
ez a 101-102 sorok se tetszenek...
a dirname $0/basename $0 az, szerintem, $0.
de az idézőjeleket úgy nem lehet egymásba ágyazni szerintem.szerk: ha matatod a fájlrendszerben a root crontabját, akkor a cron-t illene újraindítani. de, szerintem nem így kellene matatni, hanem a /etc/cron.d alá berakni egy saját crontabot és azt törölni uninstallkor.
-
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 -
samujózsi
senior tag
válasz
Fecogame #2489 üzenetére
Mert "a számítógép az utasításaid és nem a kívánságaid szerint működik"
(közel negyven éves bölcsesség)
Ha megnézed az awk doksit, az END és a BEGIN is ugyanúgy minták, mint a /.../.
A BEGIN-hez tartozó blokk még azelőtt fut le, hogy bármit beolvasna, az END-hez tartozó meg az utolsó feldolgozott sor után.
Amit te próbáltál csinálni, azzal végigmegy az inputon, a ! /wpcli/ mintához tartozó semmit végrehajtja, majd amikor elér a fájlvéghez, kiírja az input fájl utolsó sorának 9. szavát.
A szűrés csak arra vonatkozik, hogy az adott mintára illeszkedő sorral csináljon valamit.Talán van még olyan lehetőség, hogy ugorja át az adott mintának megfelelő sorokat ténylegesen hagyja ki a feldolgozásból, de ha van is, nem emlékszem rá.
Van olyan lehetőség, hogy lépjen át adott mintának megfelelő sorokat, de ez csak a beolvasott sorok feldolgozására vonatkozik, az END mintára nem érvényes:/wpcli/{ next } { ... itt csinálsz valamit a wpcli-t nem tartalmazó sorokkal }
Nem tudom, ez így érthető?
-
samujózsi
senior tag
válasz
Fecogame #2487 üzenetére
Le tudod fordítani emberi nyelvre azt, amit az awk-ba írtál?
Mert úgy saccra ha sikerülne is eltalálni a szintaxist, akkor sem azt csinálná, amire vágysz.ls -dl /mnt/backup/* | awk 'BEGIN { w="" } ! /wpcli/{ w=$9 } END { print w}'
Szerintem valami ilyesmit szerettél volna, nem?
-
bambano
titán
válasz
Fecogame #2450 üzenetére
ha és amennyiben a piton programozók értettek a dolgukhoz, akkor ez nem is fog működni. ennek a fő oka az, hogy unixban az a szokás, hogy jelszót nem a szabvány bemenetről olvasunk, hanem a terminálról. tehát van rá reális esély, hogy a setup.py program eldobja az stdin-t, és megnyitja a /dev/tty-t és arról akar olvasni, azt pedig nem tudod átirányítani.
-
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).
-
bambano
titán
válasz
Fecogame #2432 üzenetére
a grepnek (is) annyi fájlmevet adsz meg paraméterként, amennyit akarsz (amennyit a shell elvisel). tehát írhatod:
grep valami /var/log/syslog.1 /var/log/syslog /var/log/messages.1 /var/log/messages satöbbi
arra az esetre, ha a fájlnév kiterjesztéses megoldás nem jutna eszedbe.
-
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
-
bambano
titán
válasz
Fecogame #2312 üzenetére
jaja, most nyertél 3 másodpercet azon, hogy a jól specifikált bash helyett a lokális rendszer saját shelljét használod, amiről nem tudod, hogy micsoda, így majd belefuthatsz olyan problémákba, amit pár nap alatt ki is tudsz bogozni
"cut gyorsabb, mint az awk vagy a sed": de legalább nem kompatibilis vele... az awk-val is az a baj, hogy melyik gépen mi van felrakva awk néven... gawk? mawk? van egy pár lehetőség.
"cat file | grep kulcsszo": a forkbombáért régebben is szóltunk
-
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
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 -
Rimuru
veterán
válasz
Fecogame #2159 üzenetére
Ha benne van a scirpten ez a sor akkor bekeri a jelszot es atjelentkezik, szoval nincs itt gond, majd ha kileptel onnan akkor fut tovabb a script.
De gondolom az kell amit bob irt, csak nem jol fogalmaztad meg a kerdest.
Amugy nagyon csunya es nem biztosansog megoldas (ne is hasznald csak megmutatom), de siman athadhatod neki a jelszot is.
echo "passwrod" | su - user
Ha ilyesmit szeretnel akkor inkabb sudo-t hasznalnam normalisan bekonfolva. -
Jester01
veterán
válasz
Fecogame #2042 üzenetére
Már mondtam, ez a normális script működés, hogy megvárja a parancs végét.
Ha maga a parancs visszatér mielőtt végezne az erősen gyanús és az ellen közvetlenül nem tudsz semmit csinálni a script oldalán. Szerintem ott valami más probléma van, a mysql dump szinte kizárt, hogy visszatér mielőtt kész lenne. De nem mutattad meg a parancsot... -
bambano
titán
válasz
Fecogame #2042 üzenetére
a biztonsági mentés akkor ér valamit, ha vissza lehet tölteni és annak eredménye korrekt adatbázis/fájlrendszer lesz. különösen fontos, hogy a "vissza lehet tölteni" kifejezés azt is magába foglalja, hogy az illető rendszergarázda képes is végrehajtani azt.
ezt semmi más módon nem lehet kideríteni, csak ha valóban megtörténik a visszaállítás. enélkül akkor fog kiderülni, hogy nem lehet visszatölteni, amikor kellene...
ilyen apróságok is akkor derülnek ki, hogy mennyi idő a visszaállítás, mennyi ideig áll miatta az üzemeltetés, stb.
Új hozzászólás Aktív témák
Hirdetés
- Eladó Steam kulcsok kedvező áron!
- Számlás!Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- Eredeti Microsoft termékek - MEGA Akciók! Windows, Office Pro Plus, Project Pro, Visio Pro stb.
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- Windows 10/11 Home/Pro , Office 2024 kulcsok
- DELL Precision 7540 - Intel Core i9-9980HK, RTX 3000 (nagyon erős GPU-val)
- Csere-Beszámítás! Ryzen 9 9950X3D Processzor! 16Mag-32Szál!
- LENOVO ThinkBook 13s - 13.3" FullHD IPS - i5-10210U - 8GB - 256GB SSD - Win11 - MAGYAR
- LG 45GS95QE - 45" Ívelt OLED / 2K WQHD / 240Hz 0.03ms / NVIDIA G-Sync / FreeSync Premium / HDMI 2.1
- MacBook, Apple M1 / M2 kompatibilis dokkolók, DisplayLink 4K, USB-C, Type-C
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest