создание псевдонима из функции

Я пока не могу комментировать, поэтому публикую его как ответ, хотя и неполный, поскольку 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", чтобы мы могли адаптировать ответ к вашим потребностям.

2
10.09.2019, 17:27
1 ответ

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
}

Обратите внимание, что это работает только с параметрами, которые не содержат подстановочных знаков. См. ответ Кусалананды для более надежных методов.

Псевдонимы оболочки вообще не задействованы.

4
27.01.2020, 21:50

Теги

Похожие вопросы