Запустите команду, сохраненную в переменной, чтобы эхо в файл

Как заставить хранимую команду работать в следующем сценарии:

CMD='echo "test" >> test.txt' $CMD 

Он будет работать для других сценариев, таких как:

 CMD='mkdir test' $CMD 

One Solution collect form web for “Запустите команду, сохраненную в переменной, чтобы эхо в файл”

Правильное правило должно быть:

  • Сохранение данных в переменных, Сохранение кода в функциях.

Итак, правильный способ заставить эту команду работать: сделать функцию:

 first_command (){ echo "test" >> test.txt; } 

Вызовите функцию:

 first_command 

Вот и все.


Неправильно хранить команду в виде строки.
Еще хуже использовать eval для запуска таких команд.

Возможно, это работает для простой команды, но скрытая проблема заключается в том, что шаг eval удаляет цитирование команды.

Если вы сохраните эту команду

 CMD='echo "test" >> test.txt' 

eval "$CMD" (да, даже цитируется) выполнит эту команду:

 echo test >> test.txt 

Нет цитат !!!.

Очень легко забыть, что котировки нуждаются в специальном управлении с eval. И делать кавычки, работающие правильно, всегда сложно.

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

Пожалуйста, прочитайте отличное введение в проблему:
Я пытаюсь ввести команду в переменную, но сложные случаи всегда терпят неудачу!

  • Объединение нескольких выходов grep в переменную
  • Использование find с двумя наборами переменных
  • Как изменить переменные
  • Невозможно назначить вывод вложенных команд переменной в bash
  • Развертывание Jenkins не передается переменной java
  • Назначить имя хоста переменной в ksh
  • Переменная в команде find задана новой переменной в bash
  • захватить из текстового файла диапазон с использованием двух переменных в качестве начального и конечного параметров
  • Вставка переменных в команду в сценарии оболочки
  • bash - определяющие переменные с VAR = $ {: - по умолчанию}
  • Используйте sed для извлечения переменной из 1 файла и поместите ее в другую
  • Linux и Unix - лучшая ОС в мире.