Если вы пытаетесь предотвратить расширение переменных, вам нужно экранировать $
с помощью \
. Это может показаться ненужным из-за того, что переменные заключены в одинарные кавычки, однако двойные кавычки вокруг одинарных кавычек приводят к тому, что одинарные кавычки интерпретируются буквально:
$ echo "LOAD DATA INPATH '$i' INTO TABLE transient.url_log_201803 partition (ds='$TGLS', periode='$WKTS');"
LOAD DATA INPATH '' INTO TABLE transient.url_log_201803 partition (ds='', periode='');
Экранирующие переменные:
$ echo "LOAD DATA INPATH '\$i' INTO TABLE transient.url_log_201803 partition (ds='\$TGLS', periode='\$WKTS');"
LOAD DATA INPATH '$i' INTO TABLE transient.url_log_201803 partition (ds='$TGLS', periode='$WKTS');
Если вы намеревались оставить все это в двойных кавычках:
$ echo "\"LOAD DATA INPATH '\$i' INTO TABLE transient.url_log_201803 partition (ds='\$TGLS', periode='\$WKTS');\""
"LOAD DATA INPATH '$i' INTO TABLE transient.url_log_201803 partition (ds='$TGLS', periode='$WKTS');"
Ваше sudo
определение неверно. Вы разрешили networkmenu
работать с sudo
, но на самом деле вы используете networkmenu
вместо sudo networkmenu
, так что никаких дополнительных привилегий для запуска не дается. (Простое добавление записи в файл sudoers
не дает этому приложению никаких дополнительных привилегий; скорее, это позволяет команде sudo
предоставлять определенные привилегии для указанного приложения.)
Единственное место, где вы используете sudo
в вашем скрипте, это для sudo wpa_cli...
, поэтому либо вам нужно запустить весь скрипт под sudo
, либо вам нужно разрешить wpa_cli
вызываться из sudo
.
Вариант 1 :Разрешить выполнение всего сценария с привилегиями root
sudo
PATH
в начале вашего скрипта, потому что он будет работать от имени пользователя root sudo
из вашего скрипта sudo networkmenu
, а не просто как networkmenu
Вариант 2 :Разрешить запуск сценария от имени непривилегированного пользователя, но разрешить повышение прав для команды wpa_cli
:
Измените запись sudo
speklap ALL=(ALL) NOPASSWD: /sbin/wpa_cli *
Явно установите PATH
в верхней части вашего скрипта, потому что wpa_cli
находится в каталоге, который часто не указывается в пользовательских настройках PATH
(/sbin
)