У меня есть сценарий BASH, называемый script.sh, который принимает 3 аргумента и запускает с ними исполняемый файл. Первые два являются просто цифрами, но последний аргумент дает входной файл. Я хотел бы, чтобы сценарий запускал исполняемый файл с вводом в качестве аргумента исполняемого файла и использовал «<» в качестве замены для stdin. (Т.е.Выполнение переменных команд в BASH
bash script.sh 5 1 input.txt
вызывает Баш скрипт, и содержимое script.sh следующим образом:
#!/bin/bash
command1="./l${1}t${2} $3"
command2="./l${1}t${2} < $3"
echo + ${command1}
${command1}
echo + ${command2}
${command2}
Когда эхо command1 я получаю
./l5t1 input.txt
что именно то, что я хочу, и он отлично работает.
Когда я эхо command2, я получаю
./l5t1 < input.txt
, который снова является тем, что я хочу. Проблема заключается в фактической команде, выполняемой сценарием:
./l5t1 '<' input.txt
который, конечно же, вызывает ошибку сегментации в моей программе.
Я хотел бы знать, есть ли способ, которым я могу запустить команду 2, чтобы она выполняла строку точно так же, как она печатается в выходе эха. Честно говоря, я понятия не имею, почему одиночные кавычки даже вставлены вокруг символа <.
В любом случае, вы должны быть в состоянии 'eval' содержимое переменной. – Rubens