Назад | Перейти на главную страницу

сценарий оболочки для получения сведений о грантах пользователя mysql

Я пытаюсь получить данные о предоставлении пользователю mysql и передать его в файл

хари =mysql -sN -e "show grants for mysqladm";

эхо $ hari

GRANT ALL PRIVILEGES ON *prod_server_list.txt stage_server_list.txt user_grants1.txt user_grants.txt user_list_temp1.txt user_list_temp.txt* TO 'mysqladm'@'%' IDENTIFIED BY PASSWORD '*##############' WITH GRANT OPTION GRANT EXECUTE ON PROCEDURE `soxdv`.`chgpw` TO 'mysqladm'@'%' GRANT PROXY ON ''@'' TO 'mysqladm'@'%' WITH GRANT OPTION

Он получает имя файла .txt в каталоге

Фактический результат должен быть таким, как показано ниже

show grants;
+------------------------------------------------------------------------------------------------------------------------------------+
| Grants for mysqladm@%                                                                                                              |
+------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'mysqladm'@'%' IDENTIFIED BY PASSWORD '*#############################' WITH GRANT OPTION |
| GRANT EXECUTE ON PROCEDURE `soxdv`.`chgpw` TO 'mysqladm'@'%'                                                                       |
| GRANT PROXY ON ''@'' TO 'mysqladm'@'%' WITH GRANT OPTION                                                                           |
+------------------------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)

*.* заменяется именами файлов .txt

Пожалуйста, предложите мне.

Вам нужно заключить в кавычки то, что вы повторяете, иначе echo будет интерпретировать подстановочный знак с тем, что он находит в каталоге, соответствующем шаблону. Это называется подстановкой и может быть отключено.

box:[~/tmp/test]$ touch file.txt other.txt
box:[~/tmp/test]$ foo='*.txt'
box:[~/tmp/test]$ echo $foo
file.txt other.txt
nox:[~/tmp/test]$ echo '$foo'
$foo
box:[~/tmp/test]$ echo "$foo"
*.txt
box:[~/tmp/test]$ set -f 
box:[~/tmp/test]$ echo $foo
*.txt
  • В приведенном выше примере вы могли видеть, что эхо без кавычек приведет к подстановке.
  • Эхо с одинарными кавычками буквально напечатает то, что было внутри кавычек
  • Эхо с двойными кавычками будет печатать содержимое переменной, но не глобально
  • Или вы можете отключить подстановку с помощью set и свободно выводить эхо без кавычек.

Я бы рекомендовал при необходимости использовать двойные или одинарные кавычки.