Zasadnicze pytanie - czy Chat występuje w innych dystrybucjach Unixowych?
Skrypt muszę móc uruchomić zarówno w OpenWRT oraz np. Debianie...

# chat -h
Usage: chat [-e] [-E] [-v] [-V] [-t timeout] [-r report-file]
     [-T phone-number] [-U phone-number2] {-f chat-file | chat-script}

Jak to widzisz - na razie z lokalnej maszyny OpenWRT z modułem GPS?

chat -t 10 /dev/ttyUSB1

Coś takiego nie drukuje nic na ekran

Tak wiem że rzeźba, ale zależy mi na lekkości programu. I tak zamierzam zamknąć się w kilkunastu linijkach skryptu.
Chat'a?

Zgadza się jest, ale co to zmienia? Już go kiedyś instalowałem i po prostu przedstawia on ramki NMEA w bardziej czytelny sposób, a ja nie tego szukam.

Potrzebuje łapać jak najszybciej (co 1 sekundę) pozycję i wrzucać ją do zmiennej w Bashu

Założenie zrobiłem takie, aby napisać to w Bashu - nie wymaga instalacji cięższego oprogramowania, nie zajmuje wolnego miejsca na flashu. Próbuje ugryźć temat w ten sposób, że czytam w czasie rzeczywistym linia po linii (chodzi o ramki NMEA). Jeśli wystąpi interesująca mnie linia to wszystko ok i czytam sobie dalej. Jeśli linia nie występuje przez 10 sekund, chciałbym zacząć pętle od nowa.

while true; do
  timeout 10 command | { \
    while read LINE; do
      echo "> $LINE"
      if [ "$LINE" = "abc" ]; then
        echo "> "$LINE"!"
        break
      fi
    done

    echo ">> $LINE"
    # tutaj skrypt zatrzymuje się aż do momentu osiągnięcia timeout
  }
done

Jak to od razu zatrzymać, aby skrypt zaczął kolejną pętle?

Przyszedł Unielec u7621-06... OpenWRT v19.07.0 z kernelem v4.14.156.
Po podłączeniu czwartego modemu USB dostaje to:

kern.info kernel:   [  473.707550] usb 1-2.4.1: new high-speed USB device number 15 using xhci-mtk
kern.warn kernel: [  473.851836] usb 1-2.4.1: Not enough host controller resources for new device state.
kern.err kernel:    [  473.859737] usb 1-2.4.1: can't set config #1, error -12

Wydaje mi się, że wtedy dostawałem taką zwrotkę już po podłączeniu drugiego...
Dodatkowo wpiąłem w HUBa dysk i 6 pendrivów i... działa. Nic już nie rozumiem

Wiem, że Python byłby lepszy, ale zależy mi na Bashu.
W takim rozwiązaniu po wyłączeniu maszyny zdalnej pętla zatrzymuje się hmm
Pomaga tylko timeout, którego ma docelowo nie być

Znasz jeszcze jakieś pomysły, przypomniałeś mi że coś takiego istnieje, ale pamiętam kiedyś, że po zagnieżdżeniu w sobie kilku pętli był problem z przekazywaniem tych zmiennych pomiędzy pętlami.

359

(3 odpowiedzi, napisanych Inne)

8zł za Ericsson E5321 DW5560 oraz przejściówka USB<->mPCIe z Chin za 20zł ze sklepu Unielec

Cześć,

Potrzebuje odczytać ramki z mojego urządzenia ze zdalnej maszyny:

#!/usr/bin/bash

while true; do  
  for LINE in $( ( timeout 15 ssh -y root@192.168.0.1 "cat /dev/ttyUSB1" ) 2>/dev/null ); do
    echo "> $LINE" #Sprawa 1
  done
  echo ">> $LINE" #Sprawa 2
done

Sprawa:
1. abym te linie mógł odczytywać w czasie rzeczywistym, a nie dopiero po osiągnięciu timeout, muszę też móc zatrzymywać tą pętlę (brake) przed osiagnieciem timeout
2. po osiągnięciu timeout wewnętrznej pętli zmienne z niej powinny być do odczytania w tej pierwszej pętli


Głowie się już z tym kawałkiem kodu od pewnego czasu i udaje mi się osiągnąć bez problemu albo pierwsze albo drugie, ale ani razu tego czego potrzebuję -> czyli pierwsze oraz drugie.


command | while read LINE; do
  echo "> $LINE" #Sprawa 1
done

echo ">> $LINE" #zmienna pusta

To znowu działa w czasie rzeczywistym, ale zmienne nie są dostępne poza pętlą

361

(123 odpowiedzi, napisanych Inne)

Prawda, kontynuacja tutaj ponieważ pomyliłem temat:/

Aktualnie prowadzę dwa zbliżone tematy, choć jednak inne (modemów i hotplugów dla modemów). Wszystkie te posty powinienem napisać w tym temacie, dlatego podrzucam link.

Skrypt musi być bardzo uniwersalny i potrafić przeszukiwać dostępne urządzenia USB, aby można było uruchomić go ręcznie, nawet bez zdarzenia hotplug podczas podłączenia urządzenia usb do portu.

Rzeźba niesamowita, ale działa...
Jeśli się okaże, że jest jakiś prosty soft, który by mi to wylistował takie coś to chyba strzele sobie w głowę tongue

CMD=$( find /sys/devices/platform/*/usb* )
for LINE in $CMD; do
  LINE2=$LINE
  LINE2=$( echo $LINE2 | awk -F ':' '{print $1}' )
  LINE3=$LINE2
  LINE3=$( echo $LINE3 | awk -F '/' '{print $NF}' )
  LINE3=$( echo $LINE3 | grep -E '^[0-9\.\-]+$'  )
  if [ "$LINE3" != "" ] && [ "$LINE2_OLD" != "$LINE2" ]; then
    FIND=$LINE2":*"
    echo "> "$FIND""
    LINE2_OLD=$LINE2
  fi
done

Output:

> /sys/devices/platform/1e1c0000.xhci/usb1/1-1:*
> /sys/devices/platform/1e1c0000.xhci/usb1/1-1/1-1:*
> /sys/devices/platform/1e1c0000.xhci/usb1/1-0:*
> /sys/devices/platform/1e1c0000.xhci/usb2/2-0:*

363

(123 odpowiedzi, napisanych Inne)

Druga opcja kusząca, ale wymaga dużo pisania...
Może uda się opóźnić ładowanie sterownika? Pewnie kompilacja?
Czy trzeba zmienić gdzieś nazwę na większą?

364

(123 odpowiedzi, napisanych Inne)

W modemie SimCOM 7600E-H zauważyłem jeszcze jeden problem ze skryptem hotplug osadzonym w /etc/hotplug.d/usb/. Dla przypomnienia, urządzenie zgłasza się jako ttyUSB0, ttyUSB1, ttyUSB2, ttyUSB3, ttyUSB4 oraz cdc-wdm0. Podczas pracy routera po podłączeniu modemu nie ma żadnego problemu, jeśli zaś modem jest już podłączony i następnie zostanie podane zasilanie na router hotplug rozpoznaje tylko jedna zdarzenie -> to z cdc-wdm0. Sprawdzałem również zdarzenia hotsplug: /etc/hotplug.d/usbmisc i /etc/hotplug.d/tty, bez rezultatów. Co może nie grać jak trzeba?


# ls /etc/hotplug.d

block
dhcp
firmware
ieee80211
iface
neigh
net
ntp
tftp
tty
usb
usbmisc

W przypadku Firefoxa przeglądarka musi parsować treść tej strony
http://detectportal.firefox.com/success.txt
https://detectportal.firefox.com/success.txt

Na Win10 komunikat o zalogowaniu wyszedł po ok. 1 min, tylko raz, na androidzie wcale.
Po wywołaniu adresu 1.2.3.4 działa perfekcyjnie, po wywołaniu nazwy domenowej - działa bardzo ociężale.
Wydaje mi się, aby to włączyć powinienem dodać wpis iptables, a po drugie serwer dns skonfigurować tak, aby nie keszował oraz zawsze odpowiadał adresem lokalnym routera. Co o tym sądzisz?

Ok, tak włączam skryptem, kiedy nie ma Internetu

iptables -t nat -I PREROUTING -s 192.168.212.0/25 -p tcp --dport 80 -j DNAT --to 192.168.212.1

Jak teraz usunąć taki wpis?

nano /etc/config/uhttpd

# Server configuration
config uhttpd main

        # Page Not Found
        option error_page               /cgi-bin/index.html

        (...)

/etc/init.d/uhttpd restart



nano /www/index.html

<meta http-equiv="refresh" content="0; URL=/cgi-bin/" />
(...)
<a   (...)   href="/cgi-bin/">LuCI - Lua Configuration Interface</a>



nano /www/cgi-bin/index.html

#!/bin/bash

IP=$( /sbin/uci get network.lan.ipaddr )

if [ "$IP" != "" ]; then
  LOCATION="http://"$IP"/cgi-bin/luci"
else
  LOCATION="/cgi-bin/luci"
fi

echo "Status: 302 Found"
echo "Location: "$LOCATION""
echo ""

Rozwiązałem ten problem po stronie uhttpd.

A jak mogę zrobić samemu takie przekierowanie?

Tak, na swoją stronę zamiast na stronę domena.pl a na niej zawartość strony Aero2.
O tym cały czas mówię...

Tutaj jest problem:
Jeśli używam Aero2 i uruchamiam stronę domena.pl zostaje przekierowany na http://bdi.free.aero2.net.pl:8080/.
Jeśli używam iptables i uruchamiam stronę domena.pl zostaje przekierowany na domena.pl a pod nią LuCi.

Czy to tylko kwestia wykrycia, że na stronę LuCi wchodzę z 192.168.212.1 czy innego adresu i ewentualnie przekierowaniu go?
Czy po prostu regułka iptables powinna być inna?

Komunikat o zalogowanie się do sieci cały czas nie wyskakuje...

Pod adresem LuCi 192.168.212.1 kryje się...

<meta http-equiv="refresh" content="0; URL=/cgi-bin/luci" />

Czy to tutaj jest problem?

Zobacz o co mi chodzi...

https://i.ibb.co/6m1z2fX/qqqqq.png

Strona LuCi jest maskowana pod domeną "domena.pl" zamiast przekierowywana.
Być może dlatego nie wyskakuje mi komunikat "Zaloguj się do sieci".
Takie rozwiązanie ma też problem z keszowaniem się danych w przeglądarce

Byłem blisko, ale... Teraz pod http://domena.pl mam stronę LuCi, tutaj powinno chyba być przekierowanie (bez maskowania adresu). Oczywiście strony z SSL (port 443) działają prawidłowo. Komunikat o zalogowanie nie wyskakuje.

iptables -t nat -I PREROUTING -s 192.168.212.0/25 -p tcp --dport 80 -j DNAT --to 192.168.212.1

Rozumiem, że w grę wchodzi iptables?
Pomożesz z napisaniem komendy?