Подстановка команды включает текст предыдущей команды echo - PullRequest
0 голосов
/ 10 марта 2020

У меня есть скрипт, который записывает некоторую информацию заголовка на экран с помощью 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. (Постараюсь предоставить более подробную информацию по запросу, если это возможно).

...