выполнить строку в скрипте bash, содержащую несколько перенаправлений - PullRequest
0 голосов
/ 22 мая 2018

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 22 мая 2018

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

#!/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
...