#1 Le 10/03/2019, à 13:20
- PowaBanga
Condition qui ne fonctionne pas [bash]
bonjour,
Je réédite entièrement mon topic, car j'ai pas mal avancé depuis hier. Donc por faire bref, je fais appel ici à un script xboxdrv que je vais appliquer sur ma mannette PS3 si elle est connectée.
Le script devrait donc se lancer si la valeur $js0 est egale à 'PLAYSTATION3' dans ce cas çi, la condition n'est pas acceptée, je ne comprend pas pourquoi...
#!/bin/bash
js0="$(cat /proc/bus/input/devices | sed -re '/PLAYSTATION\(R\)3 Controller\"|js|Microsoft X-Box 360 pad\"/!d' | sed -e 's/H: Handlers=//g' |sed -e 's/N: Name=//g'|sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g' | sed -e 's/\"Microsoft X-Box/\n"Microsoft X-Box/g' | sed -e 's/\"PLAYSTATION\(R\)3 Controller/\n\"PLAYSTATION\(R\)3 Controller/g' | sed -e '/js0/!d' | sed -re 's/\"|event[0-9]*|js[0-9]*//g' | sed -e 's/(R)//g' |sed -e 's/Controller//g')"
echo "$js0"
if [ "$js0" = "PLAYSTATION3" ];
then
js0=$(cat /proc/bus/input/devices | sed -e '/js0/!d' | sed -e 's/H: Handlers=//g' |sed -e 's/ js0 //g')
echo $js0
screen -dmS js0 xboxdrv --evdev /dev/input/$js0 --config /home/powabanga/Téléchargements/playstation3.xboxdrv
fi
echo fin
Et voici ce que me répond le terminal
'/home/powabanga/Documents/trucs/scripts/variableps3.sh'
PLAYSTATION3
fin
Quelqu'un saurait m'aiguiller un peu ?
Dernière modification par PowaBanga (Le 11/03/2019, à 20:11)
Hors ligne
#2 Le 11/03/2019, à 20:14
- PowaBanga
Re : Condition qui ne fonctionne pas [bash]
je mets juste un petit up pour actualiser le topic
Hors ligne
#3 Le 11/03/2019, à 20:35
- pingouinux
Re : Condition qui ne fonctionne pas [bash]
Bonsoir,
Tu peux déjà différencier les echo, pour être sûr de celui dans lequel on passe.
echo 1 "$js0"
...................................
echo 2 "$js0"
Hors ligne
#4 Le 11/03/2019, à 20:42
- diesel
Re : Condition qui ne fonctionne pas [bash]
Et un
if [ "$js0" == "PLAYSTATION3" ]
ça marche pas mieux ?
Sinon, vérifier que la ligne précédente ne laisse pas traîner un petit espace avant ou après. Tu pourrais, après le premier
echo "$js0"
ajouter un
echo ${#js0}
Si le résultat est "12", ça va. Sinon...
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 11/03/2019, à 20:43)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#5 Le 11/03/2019, à 20:44
- Watael
Re : Condition qui ne fonctionne pas [bash]
salut,
hmmm, des caractères invisibles ?
mais, pourquoi est-ce qu'un simple if grep -q 'PLAYSTATIONjesaispasquoi' /proc/bus/input/devices ne suffirait-il pas ?
voire, pourquoi un simple if test -f /dev/input/PLAYSTATIONjesaispasquoi ne suffirait-il pas ?
et même, pourquoi non, là, je plaisante.
Dernière modification par Watael (Le 11/03/2019, à 20:45)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#6 Le 11/03/2019, à 20:53
- pingouinux
Re : Condition qui ne fonctionne pas [bash]
Ah oui, vous avez raison diesel83140 et Watael : il semble qu'il y ait 4 espaces derrière PLAYSTATION3.
Édité :
Voici une façon de voir le contenu de la variable
hd <<<"$js0"
Dernière modification par pingouinux (Le 11/03/2019, à 21:50)
Hors ligne
#7 Le 11/03/2019, à 23:32
- PowaBanga
Re : Condition qui ne fonctionne pas [bash]
Pour répondre à watael, j'ai besoin de savoir si la manette js0, est bien une PS3, ainsi que sont numéro d'event correspondant. Dans "/proc/bus/input/devices" ils ne sont pas sur la même ligne.
donc :
sed -re '/PLAYSTATION\(R\)3 Controller\"|js|Microsoft X-Box 360 pad\"/!d'
vire tout sauf les ligne avec le nom du controller, est ses "handler" (event* et js*)
sed -e 's/H: Handlers=//g'|sed -e 's/N: Name=//g'
met tout sur une ligne, ce qui me permettra plus tard de faire une recherche par joystick (js*) sauf que justement le fait que tout soit sur une ligne ça fou la merde, donc...
sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g' | sed -e 's/\"Microsoft X-Box/\n"Microsoft X-Box/g' | sed -e 's/\"PLAYSTATION\(R\)3 Controller/\n\"PLAYSTATION\(R\)3 Controller/g'
ceci permet de mettre les controller Xbox, et PS3 sur des lignes différentes (dans mon ca il ne peut pas y en avoir d'autres, ça tombe assez bien.
J'ai à présent, les info relative à chaque joystick (event et NAME) sur la même ligne. Toujours via sed, je peux donc isoler les infos spécifiques à chaque manettes
sed -e '/js0/!d'
selectionne le joystick 1
sed -re 's/\"|event[0-9]*|js[0-9]*//g' | sed -e 's/(R)//g' |sed -e 's/Controller//g'
et ceci permet d'isoler l'info dont j'ai besoin spécifiquement pour cette manette afin de la mettre dans une variable
Après, pour isoler l'event correspondant, c'est plus simple étant donné que l'information du numéro de joystick et de son event spécifique sont déjà sur la même ligne
et finalemant tant qu'on y est
screen -dmS js0 xboxdrv --evdev /dev/input/$js0 --config /home/powabanga/Téléchargements/playstation3.xboxdrv
me permettra plus tard éventuellement de mettre une condition pour ne pas exécuter xboxdrv si la manette xbox est déjà émulée pour cette manette, voir de créer une boucle pour vérifier que la manette pour la quelle xboxdrv est en train d'émuler le controlleur Xbox n'est pas déconnectée, et si c'est le cas, éteindre le script via un "screen -X -S $js0 quit"
J'ai 10 controllers PS3 non officiel (shanwan clone) qui sont connecté via bluetooth, je n'ai rien qui ressemble à "/dev/input/PLAYSTATION" dans mes fichiers, et j'ai donc l'intention de répéter ce script pour les 20 sortie js* possible.
Cependant si tu a des idées pour améliorer mon script, honnêtement je suis prenneur, je trouve moi même que ce que j'ai réalisé pour l'instant est assez brouillon
même s'il fonctionne à présent :
#!/bin/bash
js0="$(cat /proc/bus/input/devices | sed -re '/PLAYSTATION\(R\)3 Controller\"|js|Microsoft X-Box 360 pad\"/!d' | sed -e 's/H: Handlers=//g' |sed -e 's/N: Name=//g'|sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g' | sed -e 's/\"Microsoft X-Box/\n"Microsoft X-Box/g' | sed -e 's/\"PLAYSTATION\(R\)3 Controller/\n\"PLAYSTATION\(R\)3 Controller/g' | sed -e '/js0/!d' | sed -re 's/\"|event[0-9]*|js[0-9]*//g' | sed -e 's/(R)//g' |sed -e 's/Controller//g')"
echo "$js0"
if [ "$js0" == "PLAYSTATION3 " ]; then
js0=$(cat /proc/bus/input/devices | sed -e '/js0/!d' | sed -e 's/H: Handlers=//g' |sed -e 's/ js0 //g')
echo $js0
screen -dmS js0 xboxdrv --evdev /dev/input/$js0 --config /home/powabanga/Téléchargements/playstation3.xboxdrv
fi
echo fin
qui résulte sur
'/home/powabanga/Documents/trucs/scripts/variableps3.sh'
PLAYSTATION3
event17
fin
Graçe à vous, j'ai maintenant un script qui me permet d'émuler une manette spécifique en xbox sans que j'ai rien à faire. Merci !
Prochaines étapes, faire une boucle pour éteindre l'émulation quand la manette est déconnectée, empêcher l'émulation d'une manette qui est déjà émulée via une nouvelle condition, et limitte, je pourrais faire une boucle qui interoge tous les joystick allumé pour savoir s'ils sont émulé ou non, pour lancer le script directement dessus... ça le rendrait plus légé que de l'écrire 20 fois pour le relancer tout en entier à chaque fois...
Dernière modification par PowaBanga (Le 11/03/2019, à 23:52)
Hors ligne
#8 Le 11/03/2019, à 23:48
- Watael
Re : Condition qui ne fonctionne pas [bash]
si tu veux bien, je voudrais que tu partages ton /proc/bus/input/devices, ainsi que les informations que tu veux en extraire, et les informations dont tu disposes pour les repérer, et le format dans lequel tu veux les utiliser.
on doit pouvoir faire mieux (plus simple, plus clair) que cette suite interminable de sed.
Dernière modification par Watael (Le 11/03/2019, à 23:48)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 12/03/2019, à 00:02
- PowaBanga
Re : Condition qui ne fonctionne pas [bash]
Avec plaisir ^^
Donc en fait, il y a le nom du conroller, et un peu plus bas, une ligne avec le numéro d'event et le js correspondant -> jso pour joystick0, js1 pour joystick1, etc...
cat /proc/bus/input/devices
I: Bus=0019 Vendor=0000 Product=0001 Version=0000
N: Name="Power Button"
P: Phys=PNP0C0C/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0
U: Uniq=
H: Handlers=kbd event0
B: PROP=0
B: EV=3
B: KEY=10000000000000 0
I: Bus=0019 Vendor=0000 Product=0005 Version=0000
N: Name="Lid Switch"
P: Phys=PNP0C0D/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/input/input1
U: Uniq=
H: Handlers=event1
B: PROP=0
B: EV=21
B: SW=1
I: Bus=0019 Vendor=0000 Product=0001 Version=0000
N: Name="Power Button"
P: Phys=LNXPWRBN/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXPWRBN:00/input/input2
U: Uniq=
H: Handlers=kbd event2
B: PROP=0
B: EV=3
B: KEY=10000000000000 0
I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/devices/platform/i8042/serio0/input/input3
U: Uniq=
H: Handlers=sysrq kbd event3 leds
B: PROP=0
B: EV=120013
B: KEY=20000 20 0 0 1500f02100000 3803078f900d401 feffffdfffefffff fffffffffffffffe
B: MSC=10
B: LED=7
I: Bus=0003 Vendor=046d Product=101f Version=0111
N: Name="Logitech M305"
P: Phys=usb-0000:00:1d.0-1.1:3
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.2/0003:046D:C52B.0003/0003:046D:101F.0006/input/input15
U: Uniq=101f-86-b0-a7-da
H: Handlers=event4 mouse0
B: PROP=0
B: EV=17
B: KEY=ffff0000 0 0 0 0
B: REL=1943
B: MSC=10
I: Bus=0003 Vendor=046d Product=4004 Version=0111
N: Name="Logitech K360"
P: Phys=usb-0000:00:1d.0-1.1:1
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.2/0003:046D:C52B.0003/0003:046D:4004.0004/input/input16
U: Uniq=4004-9b-22-46-07
H: Handlers=sysrq kbd event5 leds
B: PROP=0
B: EV=12001f
B: KEY=3007f 0 0 483ffff17aff32d bf54444600000000 1 130f938b17c007 ffff7bfad941dfff febeffdfffefffff fffffffffffffffe
B: REL=1040
B: ABS=100000000
B: MSC=10
B: LED=1f
I: Bus=0003 Vendor=046d Product=4008 Version=0111
N: Name="Logitech M185"
P: Phys=usb-0000:00:1d.0-1.1:2
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.2/0003:046D:C52B.0003/0003:046D:4008.0005/input/input17
U: Uniq=4008-be-01-93-bb
H: Handlers=event6 mouse1
B: PROP=0
B: EV=17
B: KEY=ffff0000 0 0 0 0
B: REL=1943
B: MSC=10
I: Bus=0010 Vendor=001f Product=0001 Version=0100
N: Name="PC Speaker"
P: Phys=isa0061/input0
S: Sysfs=/devices/platform/pcspkr/input/input18
U: Uniq=
H: Handlers=kbd event7
B: PROP=0
B: EV=40001
B: SND=6
I: Bus=0019 Vendor=0000 Product=0000 Version=0000
N: Name="HP WMI hotkeys"
P: Phys=wmi/input0
S: Sysfs=/devices/virtual/input/input20
U: Uniq=
H: Handlers=kbd event8
B: PROP=0
B: EV=33
B: KEY=4000000000 0 1000700000000 2102400 0 0
B: MSC=10
B: SW=0
I: Bus=0011 Vendor=0002 Product=0007 Version=01b1
N: Name="SynPS/2 Synaptics TouchPad"
P: Phys=isa0060/serio1/input0
S: Sysfs=/devices/platform/i8042/serio1/input/input19
U: Uniq=
H: Handlers=event9 mouse2
B: PROP=9
B: EV=b
B: KEY=6420 30000 0 0 0 0
B: ABS=260800011000003
I: Bus=0019 Vendor=0000 Product=0006 Version=0000
N: Name="Video Bus"
P: Phys=LNXVIDEO/video/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input21
U: Uniq=
H: Handlers=kbd event10
B: PROP=0
B: EV=3
B: KEY=3e000b00000000 0 0 0
I: Bus=0003 Vendor=090c Product=37bc Version=0002
N: Name="HP Webcam-101"
P: Phys=usb-0000:00:1d.0-1.5/button
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.5/2-1.5:1.0/input/input22
U: Uniq=
H: Handlers=kbd event11
B: PROP=0
B: EV=3
B: KEY=100000 0 0 0
I: Bus=0001 Vendor=10ec Product=0270 Version=0001
N: Name="HDA Digital PCBeep"
P: Phys=card0/codec#0/beep0
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input23
U: Uniq=
H: Handlers=kbd event12
B: PROP=0
B: EV=40001
B: SND=6
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel MID Mic"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input24
U: Uniq=
H: Handlers=event13
B: PROP=0
B: EV=21
B: SW=10
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel MID Headphone"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input25
U: Uniq=
H: Handlers=event14
B: PROP=0
B: EV=21
B: SW=4
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel MID HDMI/DP,pcm=3"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input26
U: Uniq=
H: Handlers=event15
B: PROP=0
B: EV=21
B: SW=140
I: Bus=0003 Vendor=045e Product=028e Version=0110
N: Name="Microsoft X-Box 360 pad"
P: Phys=
S: Sysfs=/devices/virtual/input/input41
U: Uniq=
H: Handlers=event18 js1
B: PROP=0
B: EV=b
B: KEY=7cdb000000000000 0 0 0 0
B: ABS=3003f
I: Bus=0005 Vendor=054c Product=0268 Version=8000
N: Name="PLAYSTATION(R)3 Controller Motion Sensors"
P: Phys=00:1a:7d:da:71:11
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/bluetooth/hci0/hci0:71/0005:054C:0268.000D/input/input43
U: Uniq=06:19:9e:6e:63:25
H: Handlers=event16
B: PROP=40
B: EV=9
B: ABS=7
I: Bus=0005 Vendor=054c Product=0268 Version=8000
N: Name="PLAYSTATION(R)3 Controller"
P: Phys=00:1a:7d:da:71:11
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/bluetooth/hci0/hci0:71/0005:054C:0268.000D/input/input42
U: Uniq=06:19:9e:6e:63:25
H: Handlers=event17 js0
B: PROP=0
B: EV=20001b
B: KEY=f00000000 0 0 0 7fdb000000000000 0 0 0 0
B: ABS=3f
B: MSC=10
B: FF=107030000 0
I: Bus=0005 Vendor=054c Product=0268 Version=8000
N: Name="PLAYSTATION(R)3 Controller Motion Sensors"
P: Phys=00:1a:7d:da:71:11
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/bluetooth/hci0/hci0:66/0005:054C:0268.000E/input/input45
U: Uniq=07:45:9e:99:63:25
H: Handlers=event19
B: PROP=40
B: EV=9
B: ABS=7
I: Bus=0005 Vendor=054c Product=0268 Version=8000
N: Name="PLAYSTATION(R)3 Controller"
P: Phys=00:1a:7d:da:71:11
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/bluetooth/hci0/hci0:66/0005:054C:0268.000E/input/input44
U: Uniq=07:45:9e:99:63:25
H: Handlers=event20 js2
B: PROP=0
B: EV=20001b
B: KEY=f00000000 0 0 0 7fdb000000000000 0 0 0 0
B: ABS=3f
B: MSC=10
B: FF=107030000 0
I: Bus=0005 Vendor=054c Product=0268 Version=8000
N: Name="PLAYSTATION(R)3 Controller Motion Sensors"
P: Phys=00:1a:7d:da:71:11
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/bluetooth/hci0/hci0:55/0005:054C:0268.000F/input/input47
U: Uniq=01:46:56:8d:63:25
H: Handlers=event21
B: PROP=40
B: EV=9
B: ABS=7
I: Bus=0005 Vendor=054c Product=0268 Version=8000
N: Name="PLAYSTATION(R)3 Controller"
P: Phys=00:1a:7d:da:71:11
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/bluetooth/hci0/hci0:55/0005:054C:0268.000F/input/input46
U: Uniq=01:46:56:8d:63:25
H: Handlers=event22 js3
B: PROP=0
B: EV=20001b
B: KEY=f00000000 0 0 0 7fdb000000000000 0 0 0 0
B: ABS=3f
B: MSC=10
B: FF=107030000 0
J'ai connecté deux autre controlleur juste avant histoire de
Après, je ne vois pas ce que tu entends, par "le format dans lequel je souhaite les utiliser"...
Dernière modification par PowaBanga (Le 12/03/2019, à 00:11)
Hors ligne
#10 Le 12/03/2019, à 01:44
- Watael
Re : Condition qui ne fonctionne pas [bash]
j'arrive à ça :
sed -n '/^I/{:a;/\n$/! {N;ba;}; /PLAYSTATION\|X-Box/{s/.*Name="\([^"]*\)".*Handlers=\([^\n]*\).*/\1|\2/; /js0/p;};}'
PLAYSTATION(R)3 Controller|event17 js0
la barre verticale sert de délimiteur.
on peut encore filtrer avec sed, ou modifier le format...
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne