Неоднозначность среды/результата скрипта bash

Если вы пытаетесь предотвратить расширение переменных, вам нужно экранировать $с помощью \. Это может показаться ненужным из-за того, что переменные заключены в одинарные кавычки, однако двойные кавычки вокруг одинарных кавычек приводят к тому, что одинарные кавычки интерпретируются буквально:

$ 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');"
0
05.10.2019, 13:56
1 ответ

Ваше 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)

3
28.01.2020, 02:22

Теги

Похожие вопросы