Выполнить строку в скрипте 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