Использование пароля в shell-скрипте

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

awk -F '.' '{a=gensub(/^[0-9]*\s*|\s*[0-9]*$/,"","g",$2); print a}'

в скрипте, и он будет печатать только марку.

В середине названия брендов будут лишние пробелы, но вы можете расширить сценарий awk , чтобы справиться с этим:

awk -F '.' '{a=gensub(/^[0-9]*\s*|\s*[0-9]*$/,"","g",$2); b=gensub(/\s+/," ","g",a); print b}'

awk gensub ] - очень мощный инструмент для решения подобных проблем. Хотя этот конкретный пример грязный, я считаю, что знание того, как использовать gensub ( руководство вполне приличное ), позволит вам легко решать подобные проблемы.


Вышеуказанное относится к GNU awk ( gawk ). В системах unix старой школы ( AIX , HP-UX ) нет gawk . Как ни странно, по неизвестной причине debian также не имеет по умолчанию gawk . В debian по умолчанию awk установлено mawk . Вот версия mawk :

awk -F '.' '{gsub(/^[0-9]*\s*|\s*[0-9]*$/,"",$2); gsub(/\s+/," ",$2); print $2}'

mawk не имеет gensub , у него есть только gsub (глобальная подстановка). gsub значительно уступает gensub , поскольку не возвращает свою замену.Если вы используете debian и часто нуждаетесь в awk , я настоятельно рекомендую установить gawk (он находится в основном репо).

-1
05.10.2017, 18:14
1 ответ

Esto es similar a la respuesta de Stéphane Chazelas, pero usa sustitución de proceso y una función de shell en lugar de heredoc para proporcionar el usuario y la contraseña:

#!/bin/bash

printconf() {
cat <<-EOF
    [mysql]
    user=root
    password=supersecretpassword
EOF
}

mysql --defaults-extra-file=<(printconf) -e 'CREATE DATABASE example'

La función(printconf)solo genera un archivo mysql conf formateado correctamente.

En mi opinión, esto es más legible que tener múltiples heredocs en una sola línea.

Todavía tiene los detalles de usuario y contraseña incrustados en el script (, por lo que no requiere un archivo externo como~/.my.cnf)y aún evita exponer la contraseña en la tabla de procesos del kernel (, es decir, a través de ps, pgrep, etc. ).

NOTA:Esto requiere un shell moderno que admita la sustitución de procesos (p. bash, zshoksh).


El script contiene una contraseña de texto sin formato, por lo que debe estar adecuadamente protegido por propiedad, grupo,permisos y/o ACL. es decir, como mínimo, no debería ser legible por el mundo -.

1
28.04.2021, 23:56

Теги

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