Несмотря на то, что [[... ]]
«умнее», чем [... ]
или test...
, все же лучше явно использовать числовые операторы сравнения:
if [[ "$tpgid" -eq -1 ]]; then...
Далее, ваш шестнадцатеричный дамп:
$ hd /tmp/test/fff
00000000 20 20 20 2d 31 | -1|
показывает, что $tpgid
расширяется до " -1"
, а не "-1"
; -eq
знает, как с этим справиться, а ==
правильно выполняет сравнение строк:
$ if [[ " -1" == -1 ]]; then echo truthy; else echo falsy; fi
falsy
$ if [[ " -1" -eq -1 ]]; then echo truthy; else echo falsy; fi
truthy
Короче говоря, условие сопоставления строк не возвращает true, потому что строки на самом деле не совпадают.
При использовании nmcli
с device wifi connect
попробуйте установить параметр hidden
на yes
.
Выдержка из инструкции[1]:
wifi connect (B)SSID [password password] [wep-key-type {key | phrase}] [ifname ifname] [bssid BSSID] [name name] [private {yes | no}] [hidden {yes | no}]
Connect to a Wi-Fi network specified by SSID or BSSID. The command finds a matching connection or creates one and then activates it on a device. This is a
command-line counterpart of clicking an SSID in a GUI client. If a connection for the network already exists, it is possible to bring up (activate) the existing
profile as follows: nmcli con up id name. Note that only open, WEP and WPA-PSK networks are supported if no previous connection exists. It is also assumed that
IP configuration is obtained via DHCP.
If --wait option is not specified, the default timeout will be 90 seconds.
Available options are:
[...]
hidden
set to yes when connecting for the first time to an AP not broadcasting its SSID. Otherwise, the SSID would not be found and the connection attempt would
fail.
[1]: https://developer.gnome.org/NetworkManager/stable/nmcli.html
Обычно nmcli device wifi connect "$SSID"
является решением здесь. Это создаст новый профиль, если профиля еще не существует.
Однако для этого необходимо, чтобы NetworkManager нашел сеть в результатах сканирования, иначе он не знает, какие параметры установить. Поскольку сеть скрыта, ее может и не быть. Чтобы решить эту проблему, сначала выполните явное сканирование SSID с помощью nmcli device wifi rescan ssid "$SSID"
, чтобы найти его в результате сканирования (nmcli device wifi
).
Правильное решение действительно должно быть тем, что говорит user234931 (nmcli device wifi connect "$SSID" hidden yes
), но я не уверен, что оно действительно работает. Возможно, так оно и есть, иначе это должно быть исправлено в NetworkManager:)