Ваш подход не работает, потому что сценарий, который должен быть получен, требует две строки из stdin: сначала строка, содержащая число, затем пустая строка (которая выполняет паузу). Следовательно, вам нужно будет ввести в строку две строки: число и пустую строку. Если вы все еще хотите получить номер из своего собственного стандартного ввода, вы должны будете использовать команду read
до:
echo "executing another script"
echo "enter a number: "
read number
printf "$number\n\n" | source anotherscript.sh
Но это все еще имеет некоторую опасность: исходная команда выполняется в подоболочке ; следовательно, любые изменения в среде, выполняемые anotherscript.sh
, не будут видны в вашей оболочке.
Обходным решением было бы поместить логи чтения чисел c вне main. sh:
# This is script supermain.sh
echo "executing another script"
echo "enter a number: "
read number
printf "$number\n\n"|bash main.sh
где в main. sh, вы просто сохраняете ваш source anotherscript.sh
без каких-либо труб.