Új hozzászólás Aktív témák
-
MacCaine
őstag
Érdekes feladatba ütköztem: generálni kellene egy file-t, amiben soronként billentyűzet-szekvenciák vannak. Valami ilyesmi:
qayxsw
wsxcde
1qayxsw2
2wsxcde3
9ijnbhu8
6zhnmju7Természetesen minden variáció kellene, magyar és angol billentyűzet-kiosztással is.
Lehetséges egyáltalán egy ilyet legenerálni scriptből?
-
CPT.Pirk
Jómunkásember
Olyan kérdésem van, hogyha van egy szabvány RS232 -> USB eszköz, amit felismer a kernel és látszik az lsusb -nál, akkor az eszközön beeső értékeket le lehet-e menteni egy fájlba?
Kicsit konkrétabban, egy fpga-ra van kötve egy RS232-USB modul, én kiküldök egy frekvencia és egy erősítés értéket a modulon át, ez bemegy az USB portra, onnan le kellene menteni egy fájlba, majd a következő érték párost egy új sorba, és így tovább. Végén meg tudnék belőle grafikont rajzolni pl. libreofficeban.
Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)
-
Jester01
veterán
válasz CPT.Pirk #854 üzenetére
Ha nem csak lsusb-vel látszik, hanem ténylegesen soros portként is (pl. /dev/ttyUSB0), akkor igen egyszerűen el lehet ezt követni.
Syslog részlet:
kernel: usb 3-1: new full speed USB device number 29 using ohci_hcd
kernel: usb 3-1: New USB device found, idVendor=067b, idProduct=2303
kernel: usb 3-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
kernel: usbcore: registered new interface driver usbserial
kernel: USB Serial support registered for generic
kernel: usbcore: registered new interface driver usbserial_generic
kernel: usbserial: USB Serial Driver core
kernel: USB Serial support registered for pl2303
kernel: pl2303 3-1:1.0: pl2303 converter detected
kernel: usb 3-1: pl2303 converter now attached to ttyUSB0
kernel: usbcore: registered new interface driver pl2303
kernel: pl2303: Prolific PL2303 USB to serial adaptor driverNekem például hőmérők vannak így bekötve, az értékeket pedig egy ilyen script rész logolta:
while true
do
echo -ne "#03\r" >/dev/ttyUSB0
v=`dd if=/dev/ttyUSB0 bs=42 count=1 2>/dev/null`
d=`date --rfc-3339=seconds -u`
echo "${d:0:16}${v//+/;}" >>temp.txt
sleep 60
done[ Szerkesztve ]
Jester
-
CPT.Pirk
Jómunkásember
válasz Jester01 #857 üzenetére
A fene vigye el, most nézem, hogy nem rendes pici usb-t tettek rá, hanem ezt az új, még kisebb usb-t.
Amilyen pici a csatlakozó, még ráheftelni sem nagyon lehet másikat, vennem kell egy kábelt neki.Jelentkezem, ha végre be tudtam dugni.
[ Szerkesztve ]
Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)
-
-
Jester01
veterán
válasz MacCaine #859 üzenetére
Először is kell egy táblázat, ami minden billentyűhöz megmondja a szomszédait. Aztán szépen rekurzívan bejárod adott hosszig, ügyelve, hogy ismétlődés ne legyen (már ha ez feltétel). Például valahogy így:
#! /bin/bash
len=3
declare -A layout
layout["a"]=qwsxz
layout["s"]=wedcxzaq
layout["d"]=erfvcxsw
layout["f"]=rtgbvcde
# ...
function process
{
local text="$1"
local options="$2"
local i
local letter
local newtext
local next
for ((i=0; i<${#options}; i+=1))
do
letter=${options:i:1}
if [ "${text/$letter/}" = "${text}" ]
then
newtext="${text}${letter}"
if [[ ${#newtext} == $len ]]
then
echo "$newtext"
else
next=${layout[$letter]}
if [[ ${#next} > 0 ]]
then
process "$newtext" "$next"
fi
fi
fi
done
}
for i in "${!layout[@]}"
do
process "" "$i"
doneJester
-
sonar
addikt
Sziasztok,
Segitségeteket szeretném kérni, mert még új vagyok a shell scriptelésben és elakadtam.
Olyat szeretnék, hogy ha
$1 nem "LDDS_" -el kezdődik akkor tegye automatikusan tegye elé.
Google-ztam, de nem igazán találtam használható megoldást.A tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!
-
sonar
addikt
Illetve lenne még egy kérdésem.
Nem tudjátok, hogy maximum mennyi command line argument lehet?A tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!
-
ez kernel paraméter.
a parancssor teljes méretét a getconf ARG_MAX mondja meg, ebből még le kell vonni a környezet méretét (env | wc -c)azt nem tudom, darabszám limitáció van-e, a fenti az csak méret limitáció.
ha túl sok a paraméter és attól félsz, hogy ezért kiakad, akkor xargs manual olvasgatása segít[ Szerkesztve ]
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
sonar
addikt
Ezzel mi lehet a gond?
find . -iname *.aod -exec cp -p "{}" /volume1/SID/0/{`sed 'y/aod/AOD/`} \; -print0A tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!
-
első ránézésre a páratlan aposztróf biztos gond, az y/aod előtti aposztrófnak nem látom a párját.
szerk:
második ránézésre a sed szabvány bemenetén várja a szerkeszteni valót, így az a sed nem tudom, honnan kapna adatot.harmadik ránézésre a -iname *.aod-ban a *.aod-ot mindenképpen aposztrófok közé tenném, mert ha az aktuális könyvtáradban van egy aod nevű fájl, akkor a shell helyettesíteni fogja a nevét.
[ Szerkesztve ]
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
sonar
addikt
Az aposztróf valóban hiányzott, de sajnos nem müxik még igy sem.
A lényeg, hogy bizonyos kiterjesztést nagybetűsen kellene átmásolni X-ből Y-ba.
ash shell és nincsen tr parancs
Valami még mindig hibádzik
find . -maxdepth 1 -iname "*.txt" -exec cp -p {} /tmp/{`sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`} \; -print0A tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!
-
de azzal, hogy forkolsz egy sed-et bemenet nélkül, mi a célod?
másrészt meg a nevet aposztrófok közé kell tenni, nem idézőjelek közé, mert különben a shell kifejtheti.
szerintem valami ilyesmit kellene:
find . -name '*.aod'| sed -e 's,.*,cp & /uj/konyvtar/&,' -e 's,.aod$,.AOD,' | sh[ Szerkesztve ]
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
sonar
addikt
Megy a find aposztróf és idézőjel nélkül is.
Amit te irtál az működik, de csak a kiterjesztést (ami jelen esetben .aod) teszi át nagybetűsre. Én azt szeretném, hogy az egész filenév nagybetűs legyen.Amit én irtam az külön külön működik, de a bajom az amit te is irtál, hogy nincs a sednek bemenete. Csak nem tudom, hogy hogyan adjam át neki.
A tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!
-
ezt próbáld meg kipofozni:
-exec cp -p {} /tmp/$(echo {} | sed ...)
szerintem nem kell a sed köré a {}, viszont kell egy parancshelyettesítés, ami mostanában $( ) (nem aposztróf, mert az obsoloted), és úgy láttam, hogyha többször írod a {}-t, akkor a find mindegyiket helyettesíti, ezért lehet egy echo {}-val etetni a sedet.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
CPT.Pirk
Jómunkásember
Haladok a projectemmel. Olyan kérdésem lenne, hogy önmagában a bash script elég-e az alábbi feladatok elvégezésre:
- USB-ről "értékcsomagok" beolvasása, ezekben 12 bit tartalmazná az érdemi adatot, előtte lévő x (mondjuk 16) bit meg azt, hogy hányadik mérés adata érkezett meg, a megadott maximumig kellene letárolni az értékeket. Ezeket külön kellene választani mondjuk bitszám alapján. Esetleg eleve külön is elküldhetem őket, ha úgy egyszerűbb.
- A 12 bites bináris értéket át kellene alakítani decimális számmá (ezek Uki és Ube lennének), majd el kellene végezni rájuk ezt a képletet: Au = 20* log_10 (Uki / Ube).
De mindenek előtt, egyszer olyat kellene csinálnom, hogy figyelem, mi esik be USB porton. Nincs túl sok bash script tapasztalatom, szóval a fenti kérdéseket ennek megfelelően értékeljétek.
Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)
-
-
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
-
-
CPT.Pirk
Jómunkásember
Szóval ez úgy soros port, hogy az FPGA-m felé néz 4 port, RX,TX, RTS, CTS, a kis panelon egy FT232RQ IC van, erről meg már rendes USB port jön le, az van összekötve a számítógéppel. Így néz ki egészben: [link]
Akkor a logaritmus csúszik kicsit, max összeszenvedek rá egy C programot, vagy valami.
Viszont ami fontos lenne, olyat lehet csinálni, hogy valahogy detektáljam PC-n, ha valamit elküld ez a kis modul? Bőven megfelelne, ha egy fájlba kiíródna a beesett 8 bit, vagy látnám terminálban valahogy, stb.
szerk: bc/dc -ről még nem igen halottam, a DC valami C szerű cucc a wiki szerint. C, DC, BC közül melyiket ajánljátok?
C-t ugyan tanultam kicsit, de az nem sok.
[ Szerkesztve ]
Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)
-
-
Jester01
veterán
válasz CPT.Pirk #876 üzenetére
dc és bc "számológép" programok.
Logaritmus bc-vel például:$ echo "l(2.71)" | bc -l
.99694863489160953206Olvasáshoz legegyszerűbb ha végtelen ciklusban simán pollozod a /dev/ttyUSB0-t és kész.
Lásd még #857, bár nekem parancsot kellett kiküldeni, illetve fix byteot olvasni.
[ Szerkesztve ]
Jester
-
CPT.Pirk
Jómunkásember
No odáig eljutottam, hogy a /dev/serial... alatt is létrejön eszköz, mikor csatlakoztatom a modult, valamint a /dev/ttyUSB0 is. Ahogy nézem, ez utóbbit szokták kezelni.
Nem igazán találtam utalást Linux alatt az "online" loggolására, csak Windowsos megoldásokat, valami ilyesmit találtam Linuxra:
exec </dev/ttyUSB0
stty igncr
while read -r; do
echo "[$(date)]: $REPLY"
done </dev/ttyUSB0 >>/usb/BigDrive/CurrentCost/CurrentCost.log[ Szerkesztve ]
Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)
-
-
lapa
veterán
üdv. lett hőmérőm sysfs-ben, az alábbi dolgot kéne megcsinálnom:
cat `ls -R /media/temp/10.*/temperature` >> /tmp/temp
ez kirakja a hőmérsékleteket a fájlba, de nem tudom ez a megoldás hatékony-e egyátalán. valszeg az lenne a jobb, ha felsorolnám az összes kiolvasandó filet egymás alá, vagy ilyesmi. de ezt még megoldom.
a következő bajom, hogy hogyan lesz nekem új sorom a fájlban. azt megtaláltam, hogy ez \n, de nem akart még összejönni a helyes parancs.
a harmadik meg, hogy ezt 10-20 mp-ként kéne elindítani, vagyis valami hatékony számlálás is kéne, ami nem eszi a cpu-t. legrosszabb esetben maradok a cron percnél.
ezekre kéne nekem valami frappáns. ja, meg minden sor elejére egy dátum, de az asszem $now vagy ilyesmi.
köszi az ötleteket.
-
nem, nem hatékony, egy felesleges ls-t forkolsz, van benne egy felesleges processz helyettesítés.
szerintem a cat /media/temp/10.*/temperature is működne.
a 20 másodpercre azt javaslom, hogy cronból indítsd 5 percenként, és benne legyen egy ilyen ciklus:
for i in $(seq 1 15); do
cat ...
sleep 20
donea dátumra meg a sorokra tördeléshez esetleg sed.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
lapa
veterán
köszi a segítséget, ilyet hoztam végül össze:
#!/bin/sh
lejar=`date --date='3580 second'`
for i in $(seq 1 9999999); do
if [ $(($date - $lejar)) < 0 ]; then
miko=`date +"%Y.%m.%d %H:%M:%S"`
mit=`cat /media/sensor/10.*/temperature`
echo $miko$mit >> /tmp/sensor
sleep 15
else
exit 0
fi
donesajnos mint kiderült nem jó a tick szerinti ciklus, mert a cat... eltart jópár másodpercig (1-wire összes szenzor lekér). még nem teszteltem működik-e egyátalán.
(mindemellett ezen a ponton még ki is kéne írnia egy második fájlba az elmúlt egy órában történteket, de azt már megoldom cat -tal.)
köszi mindig.
[ Szerkesztve ]
-
#! /bin/bash
for i in $(seq 1 179); do
date +"%Y.%m.%d %H:%M:%S" >> /tmp/sensor
cat /media/sensor/10.*/temperature >> /tmp/sensor &
sleep 20
done
wait
cat /tmp/sensor >>oraimentes.txt/media/sensor/10.*/temperatureilletve lehet közvetlenül abba a fájlba tenni, ami a végleges helye.
fájlnévben is működik a parancsbehelyettesítés, pl:cat /media/sensor/10.*/temperature >>/var/log/sensorok/$(date '+%h%m')/oralog.txt
[ Szerkesztve ]
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
lapa
veterán
igen, var/log/-ban van most, és nem is akkora gond, mert ssd. viszont jobban szeretném, ha a /home/ -on belül is meglenne. és akkor gondoltam inkább óránként egy spinup-spindown és közte meg mehet a /tmp/-be, ami ramdrive.
de az is lehet, hogy hagyom az ssd-re írni 20 mp-nként, aztán néha kimásolni a /home/-ba.
egy fájlban lesz, de az jó hogy írtál azért ilyen sample-t is.
mondjuk még nem teljesen világos, hogy ez miért oldja meg a késleltetést.
amúgy csináltam egy újabb rev-et, de nem műx:
#!/bin/bash
touch /tmp/sensor
most=`date +%s`
lejar=`date --date='3580 second' +%s`
while [ $most - $lejar < 0 ]
do
most=`date +%s`
miko=`date +"%Y.%m.%d %H:%M:%S"`
mit=`cat /media/sensor/10.*/temperature`
echo $miko$mit >> /tmp/sensor
sleep 15
doneerre aszongya:
./sensor.sh: line 8: 0: No such file or directory
UPD: ahh:
while [ $most - $lejar < 0 ] --> while [ $most -le $lejar ]
[ Szerkesztve ]
-
lapa
veterán
most már mindent összeraktam, műxik is szépen. a korábbi logot viszont konszolidálnom kell. a feladat relatíve egyszerű:
2011.03.10 16:49:16 7.25 20.94 7.94 5.94 22.06
2011.03.10 16:49:26 7.25 20.94 7.94 5.94 22.06
2011.03.10 16:49:36 7.25 20.94 7.94 5.88 22.06vannak ilyen, szóközökkel elválasztott adataim. az első két oszlop az idő, nekem meg kéne cserélnem a negyedik és ötödik oszlopot.
azaz a fentiek ilyenné alakulnának:
2011.03.10 16:49:16 7.25 7.94 20.94 5.94 22.06
2011.03.10 16:49:26 7.25 7.94 20.94 5.94 22.06
2011.03.10 16:49:36 7.25 7.94 20.94 5.88 22.06ígérem ez az utolsó, aztán nyugton maradok a hőmérőzésemmel egy jó darabig.
[ Szerkesztve ]
-
nem írom le a megfejtést, mert sorminta lenne belőle, de kb:
sed -e 's/\([^ ]*\) ...
ez a fordított per zárójel kockazárójel kalap szóköz kockazárójel * fordítottper zárójel majd utána egy szóköz, ebből rakjál egymás után annyit, ahány oszlopod van.
majd erre a \1 \2 \3 \5 \4 formában lehet hivatkozni a sed-ben.
tehát ilyesmi:
sed -e 's/a fentiek/\1 \2 \3 \5 \4/'Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
itt az ideje, hogy megint tanítsatok nekem valamit
egy fájlban ethernet címek vannak, amit greppel válogatok. ami kijön a csőből, azt át kellene alakítani pontokkal elválasztott tizes számrendszerbeli alakra. a nyelv bash.
tehát jön egy:
00:1A:AD:7A:13:44 string az inputon, vagy ugyanez kisbetűvel, és kellene belőle egy 0.26.173.122.19.68 string.tia
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
az első, hogy amit zárójelek közé raksz, azt a sed egy csoportként kezeli, és \sorszám formában lehet rá hivatkozni. de mivel itt a zárójel nem szöveg, hanem vezérlőjel, ezért visszaperrel "eszképelni" kell.
a csoporton belül meg annyi van, hogy a kalap^ negál, tehát bármi, ami nem mögötte van, konkrétan most szóköz, tehát bármi, ami nem szóköz, a * miatt ebből tetszőleges mennyiség. utána berakjuk azt a mezőelválasztó szóközt, amit említettél a feladatban, majd ezt ismételjük a szükséges darabszámszor. a végén pedig \1 \2 stb. formában előszedetjük a sed-del, amit az adott csoportra rá tudott húzni.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
válasz Jester01 #892 üzenetére
a második, az szép... ascii art kick járna érte a régi ircen
egyébként én is valami hasonlóra jutottam a guglizás során, hogy printf "%d.%d...." és stringműveletekkel szedem szét a mac-et, de azt nem láttam, hogy a hex-dec konverziót a shell végzi, nem a printf, ezért nem kell printf.
szép
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
-
CPT.Pirk
Jómunkásember
Mi a menete egy Shell scritpben annak, hogy benyeljem az adatokat USB-s uartomról?
Windowson így megy:
Fel kell építeni a kapcsolatot (egy packet monitor programban csináltam), megadva, hogy 9600baud, 2 stop bit, nincs paritás bit. Ez után tud csak küldeni az uart modulom csomagokat a PC-re.Valamint ilyen formában jönnek az adatok 4* 8 biten, ez 2 darab 12 bites AD kimenetéről származik:
1. 8 bit: AD1 7..0 bitek
2. 8 bit: "0000" és AD1 11..8 bitek
3. 8 bit: AD2 7..0 bitek
4. 8 bit: "0000" és AD2 11..8 bitekEzeket kellene az eredeti, 12 bites formában letárolnom. Az egyszerűség kedvéért kezdésnek elég az is, ha csak az AD1 2*8 bitjével foglalkozunk.
Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)
-
Jester01
veterán
-
-
CPT.Pirk
Jómunkásember
válasz Jester01 #895 üzenetére
stty -F /dev/ttyUSB0 9600 cstopb -parenb
Ez terminálban rootként lefut, probléma nélkül. Viszont ha megint beírom az stty parancsot, akkor meg továbbra is 38400 baud-ot ír.
Szóval nem tudom, hogy átállt-e.
od -An -d -N4 /dev/ttyUSB0
Igen, decimális számot szeretnék. Tehát össze kell pakolni 2*8 bitet egybe ahhoz, hogy a korrekt értéket lássam. Ehhez a parancshoz tudsz mutatni valami leírást? Nem nagyon találtam most hirtelen.Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)
-
CPT.Pirk
Jómunkásember
válasz Jester01 #895 üzenetére
stty -F /dev/ttyUSB0 9600 cread crtscts cs8 -cstopb -parenb Ez így már működik, ha így írom be, akkor villog az adás led, tehát a modulom és a gép között létrejött a kapcsolat. Viszont az stty szerint továbbra sem változott a baudrate, bár ha az lenne a valóság, akkor szerintem nem küldözgetne a modulom.
Csináltam egy N4 nevű fájlt, majd kiadtam az od-s parancsot:
od -An -d -N4 /dev/ttyUSB0, ami után már nem küld a modulom semmit a gépnek, a fájlba nem kerül semmi. Milyen formában kellene ezt kiadni? Ha terminálban adom ki, akkor csak kilépni lehet a terminálból.
Nincs más - csak egy szál gitár - szidom a rendszert - forradalmár. - Én vagyok egyedül 88 telén. (Auróra)
Új hozzászólás Aktív témák
- AKCIÓ! - STEAM kulcsok /Anuchard, Aragami, Children of Morta, stb. - 2024.04.17.
- Windows 10 Home COA fizikai licencek kiárusítás ingyenes szállítással
- Windows, Office licencek a legolcsóbban, egyenesen a Microsoft-tól - 2990 Ft-tól!
- Eredeti Microsoft termékek - MEGA Akciók! Windows, Office Pro Plus, Project Pro, Visio Pro stb.
- PC JÁTÉKOK (OLCSÓ STEAM, EA , UPLAY KULCSOK ÉS SOKMINDEN MÁS IS 100% GARANCIA )