Выполнить строку в скрипте bash, содержащую несколько перенаправлений

Я пытаюсь написать bash-скрипт, который просто действует как эмулятор. Он принимает данные от пользователя и выполняет команду, перенаправляя команду вместе с результатом в файл. Я не могу обрабатывать входы, которые имеют | или> в них.

Единственный вариант, который я мог найти, это разделение команд на основе | в массив и запускать их по отдельности. Однако это не позволяет> перенаправлять.

Заранее спасибо.

$ cmd - команда, принимаемая от пользователя

Я использовал команду $cmd 2>&1 | tee -a $flname

но это не работает, если есть | или> в $ cmd

/ bin / bash -c "$cmd 2>&1 | tee -a $flname" также не запускает и не сохраняет команду

1 ответ

Решение

Попробуй это:

#!/bin/bash
read -r -p "Insert command to execute"$'\n' cmd
echo "Executing '$cmd'"
/bin/bash -c "$cmd"
# or eval "$cmd"

Пример исполнения:

$ ./script.sh 
Insert command to execute
printf '1\n2\n3\n4\n' | grep '1\|3'
Executing 'printf '1\n2\n3\n4\n' | grep '1\|3''
1
3
Другие вопросы по тегам