У меня есть скрипт, который записывает некоторую информацию заголовка на экран с помощью 3 команд эха, а затем должен удалить файл, который был ранее создан (и существует). Файл представляет собой текстовый файл 6-di git, имя которого имеет формат ddmmyy.
#!/usr/bin/ksh
clear
echo "******************"
echo "Program name Version: " $VERSION_NUM
echo "******************"
#Set the tmp directory
export MY_TMP_DIR="$MYPATH/$USER/tmp_$(date +%y%m%d%H%M%S)"
В следующем сценарии:
rm -rf $MY_TMP_DIR
Эти сценарии выполняются несколькими пользователями. В 99% случаев он просто удаляет временный каталог, но в 1% выполнения он завершается ошибкой из-за неправильной формы $ MY_TMP_DIR.
После регистрации оцениваемой команды. Получается значение переменной включает 3 выхода команды эха . Файл журнала показывает, что это проверяемая строка (с переносами строк):
"rm -rf /pathToWorkingAera/User1/tmp_******************
Program name Version: 3.0.1
************
280220"
Это вызывает беспорядок (очевидно) со звездочками, что приводит к удалению всех видов вещей. К счастью, система контролируется доступом, чтобы ограничить ущерб.
Промежуточное исправление состоит в том, чтобы изменить звездочки в командах эха, чтобы позволить сценарию безопасно завершиться ошибкой, и очевидно, что rm -rf опасен, но это не root причина ошибки.
Кто-нибудь может подсказать , каким образом вывод эха может быть получен с помощью присваивания вывода команды "date"? Как это предотвратить? Я не могу это исправить, так как не понимаю, как это вообще происходит.
Проблема в том, что sporadi c, не повторяется и не определяется пользователем c.
Система RHEL7.7 bash. (Постараюсь предоставить более подробную информацию по запросу, если это возможно).