В процессе работы на пути к (безопасно) нагрузки заданий из конфигурационных файлов, я пытаюсь придумать функции оболочки, которая бы:Safe (и ограничения) версия Eval
- с произвольным строка, принятая в качестве первого аргумента, применяет безопасные расширения (т.е. переменные расширения,
${}
разложений ...), но блокирует любое небезопасное расширение (в том числе, если оно вложено в другие конструкции). - Присвоить результат имени переменной, полученному в качестве второго аргумента (имя переменной можно считать безопасным для целей этого вопроса)
- Предпочтительно быть чистой оболочкой (для меня характерна Bash-специфическая), но предложение, использующее внешняя команда будет в порядке, если она обеспечивает лучшие результаты, не слишком сильно ухудшает производительность и зависит от утилит, обычно присутствующих при базовой установке UNIX-подобных операционных систем.
- Выполните расширение, избавляясь от котировок «первого уровня», как это сделала бы оболочка.
Вот пример (предполагая функцию safeval
встречи выше, и уже загружены в текущем контексте):
export A=1
safeval '$A$(ls /)' B
echo "$B" # Echoes 1$(ls /)
safeval '"a""b"' C
echo "$C" # Echoes ab
За исключением принятия второго аргумента - который легко добавлен - [this] (http://stackoverflow.com/a/29268513/45375) ответ моего, который мы [ранее обсуждали] (http: // stackoverflow.com/a/42328711/45375) удовлетворяет вашим требованиям (за исключением того, что вы хотели посмотреть на замену вызовов 'tr' с расширением параметров оболочки). – mklement0
@ 123 Я не думаю, что поиск будет соответствовать моим требованиям безопасности. – Fred
@ mklement0 Я предоставлю ответ, основанный на вашем ответе выше, но это не делает то же самое. Пожалуйста, несите меня. – Fred