1 つの Linux マシンですべての USB をアンバインド/バインドするスクリプトを作成する必要があります。
このためには、次を実行する必要があります。
lsusb -t は以下を返します:
root@lsdg7sd-fc:~# lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ohci_hcd/10p, 12M
|__ Port 4: Dev 2, If 0, Class=vend., Driver=ftdi_sio, 12M
|__ Port 6: Dev 4, If 0, Class=HID, Driver=usbhid, 1.5M
|__ Port 6: Dev 4, If 1, Class=HID, Driver=usbhid, 1.5M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/10p, 480M
さて、この例では、次を実行する必要があります。
// disable the bus 1, port 1
echo '2-4' | tee /sys/bus/usb/drivers/usb/unbind
// disable the bus 1, port 2
echo '2-6' | tee /sys/bus/usb/drivers/usb/unbind
// enable the bus 1, port 1
echo '2-4' | tee /sys/bus/usb/drivers/usb/bind
// enable the bus 1, port 2
echo '2-6' | tee /sys/bus/usb/drivers/usb/bind
スクリプトを作成してこれを達成するために(私はLinuxに非常に慣れていません)、次のことを行いました。
#!/bin/bash
lsusb -t | awk '{
bus="";
if($1=="|__")
print "Child USB Port: ",$3;
else if ($1=="/:") {
print $3;
var= $(echo $3 | grep -o "[1-9]");
echo $var;
}
}'
var=`echo "02.Port" | grep -o "[1-9]"`;
echo $var;
var=`echo "02.Port" | grep -o "[0-9]\{2\}"`;
echo $var;
var を設定するために、考えられるすべての組み合わせを試しました。私はいつもエラーが発生します。
awk: line 8: syntax error at or near grep
誰かが解決策または別のアプローチを提案できますか?
読んでくれてありがとう。
- - - - - - - - - - - アップデート
Ed Morton に感謝します。入力はコマンド lsusb -t: の結果です (私の最後で)
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ohci_hcd/10p, 12M
|__ Port 4: Dev 2, If 0, Class=vend., Driver=ftdi_sio, 12M
|__ Port 6: Dev 4, If 0, Class=HID, Driver=usbhid, 1.5M
|__ Port 6: Dev 4, If 1, Class=HID, Driver=usbhid, 1.5M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/10p, 480M
そして、この情報を解析して BUS 番号とポート番号を取得したいと考えています。したがって、出力は次のようになります。
2-1
2-4
2-6
2-6
1-1
ただし、「子」ポートのみが必要なので、次の出力が必要です。
2-4
2-6
2-6
再度、感謝します!