Я пока не могу комментировать, поэтому публикую его как ответ, хотя и неполный, поскольку OP не опубликовал достаточно данных.
Вероятно, вы захотите изучить expect
. Это язык сценариев сам по себе, но его можно смешивать с bash
(, хотя это не рекомендуется, насколько я знаю ). В простейшей форме это работает так:
#!/usr/bin/expect
expect "Prompt: "
send "my input\r"
expect eof
\r
означаетreturn
(я думаю ), просто введите клавишу .
Так, например, expect
скрипт для вашей программы может выглядеть так:
#!/usr/bin/expect
expect "Provide 1: "
send "1\r
expect "Provide filename: "
send "foobar.txt\r"
expect "Provide 5: "
send "5\r"
# and so on...
expect eof
Пожалуйста, предоставьте код, который у вас есть, и примеры запросов вывода из вашей программы "x", чтобы мы могли адаптировать ответ к вашим потребностям.
aliasString
не содержит никаких специальных символов оболочки, кроме пробелов. Таким образом, eval $aliasString
, eval "$aliasString"
и $aliasString
эквивалентны. Подстановка переменной без кавычекaliasString
выполняет разбиение на слова и расширение подстановочных знаков; поскольку подстановочных знаков нет, это просто разделение слов. eval "$aliasString"
выполняет все этапы синтаксического анализа и оценки оболочки; поскольку нет никаких специальных символов, кроме пробелов, единственное, что происходит, — это разбиение слов. eval $aliasString
выполняет расщепление слова из подстановки переменной без кавычек, затем объединяет слова вместе с пробелом между ними, а затем выполняет всю оценку оболочки, которая снова разбивает слова.
Вот более простой способ написать эту функцию на простом языке sh.
tunnel () {
command=$1
shift
for port do
command="-N -L "$port:localhost:$port $command"
done
autossh -M 20000 $command
}
Обратите внимание, что это работает только с параметрами, которые не содержат подстановочных знаков. См. ответ Кусалананды для более надежных методов.
Псевдонимы оболочки вообще не задействованы.