Аргументы сценария оболочки - это всего лишь $ 1, $ 2, $ 3 и так далее. Например, введите echo $ 2; echo $ 1 в файле script.sh, сделайте его исполняемым и запустите как ./script.sh one two.
В вашем скрипте:
i = $ 1
a = $ 2
y = $ 3
и запустите его как ./ myscript.sh 3 4 23
. Теперь мне будет 3, a будет 4, а y будет 23.
Вы установили перенаправления в неправильном порядке. Стандартный вывод второй подстановки процесса (, который имеет префикс stderr:
), имеет свой стандартный вывод с префиксом первой подстановки процесса, потому что он был запущен позже.
Попробуйте вместо этого:
exec 2> >( while read line; do echo " stderr: $line"; done )
exec > >( while read line; do echo " stdout: $line"; done )
echo "rolo"
echo "cholo" >&2
Этот вывод
stderr: cholo
stdout: rolo
чего, я полагаю, вы и хотите.