Если у вас есть nmcli
, думаю, это самое простое решение.
Для нового соединения:
nmcli dev wifi connect
Или, если соединение уже было установлено:
nmcli con up
(или если это не работает, попробуйте nmcli con up id
)
Из руководства по Bash (man bash
):
Command Substitution Command substitution allows the output of a command to replace the command name. There are two forms: $(command) or `command` Bash performs the expansion by executing command in a subshell environment and replacing the command substitution with the standard output of the command, with any trailing newlines deleted. Embedded newlines are not deleted, but they may be removed during word splitting. The command substitution $(cat file) can be replaced by the equivalent but faster $(< file).
(Это справедливо для всех Bourne-подобных оболочек, т.е. sh
, ksh
, zsh
, bash
и др, а zsh
также способен перехватывать таким образом данные со встроенными символами NUL)
Команда
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
присвоит переменной basedir
имя каталога, в котором находится скрипт (при этом все обратные слеши будут заменены на прямые). Любые ошибки, предупреждения или другие диагностические сообщения, которые выводятся в стандартный поток ошибок, будут по-прежнему отображаться на терминале ($(...)
захватывает только стандартный вывод команды).
Оболочка начнет с выполнения самой внутренней подстановки команды:
echo "$0" | sed -e 's,\\,/,g'
Вывод этой подстановки будет передан в виде строки dirname
, а вывод этой подстановки будет присвоен переменной basedir
.
Двойные кавычки нужны для того, чтобы убедиться, что не будет произведена разбивка слов или сглаживание имен файлов, иначе вы можете обнаружить, что скрипт не работает или выдает странные результаты, когда $0
(имя скрипта, включая путь, используемый для его выполнения) содержит символ пробела или символ сглаживания имен файлов (например, ?
или *
).
В целом, хорошей идеей является всегда заключать в кавычки расширения (расширения переменных, подстановки команд и арифметические расширения). См. этот вопрос и ответы на него для отличного объяснения, почему это хорошая идея.
Если скрипт был выполнен как
$ /usr/local/bin/script.sh
то basedir
получит значение /usr/local/bin
.
Или, на Cygwin:
$ bash c:\\Users\\Me\\script.sh
тогда basedir
получит значение c:/Users/Me
. Двойные обратные косые черты в командной строке в этом случае нужны только для того, чтобы убрать одинарные обратные косые черты из оболочки. Фактическое значение $0
- c:\Users\Me\script.sh
.
Другой способ сделать то же самое без использования dirname
, echo
и sed
был бы
basedir="${0//\\//}"
basedir="${basedir%/*}"
Это означает, что запустить то, что находится внутри круглых скобок , в подоболочке и вернуть это как значение ], в вашем случае присваивая это переменной
.
varible = $ (..)
вызвал подстановку команд , и это означает не что иное, как запустить оболочки и сохранить ее вывод в переменной или отобразить обратно с помощью команды echo. Например, отобразите дату и время:
echo "Today is $(date)"
и для сохранения их в переменной:
SERVERNAME=$(hostname)
Для получения дополнительной информации: https://www.cyberciti.biz/faq/unix-linux-bsd-appleosx-bash -assign-variable-command-output /