Я dokerising veracryp и мне нужно запустить скрипт установки в неинтерактивном режиме. Для запуска скрипта мне нужно передать ему ответы, которые запрашивает скрипт, если он запущен в интерактивном режиме. проблема заключается в том, что если я передаю ответ по команде piping или из файла, я получаю сообщение об ошибке:
echo -e "1\n\nq\ny\ny\n\n" | /opt/tdp/veracrypt-1.23-setup-console-x64
Verifying archive integrity... 100%
All good. Uncompressing VeraCrypt 1.23 Installer 100%
Error: Terminal required
Если я запускаю тот же сценарий без передачи по трубопроводу, сценарий работает нормально.
Я сузил проблему до этой строки
https://github.com/veracrypt/VeraCrypt/blob/a108db7c85248a3b61d0c89c086922332249f518/src/Setup/Linux/veracrypt_install_template.sh#L49
Проблема в том, что строка кода оценивается по-разному в зависимости от того, запущен ли скриптпо трубопроводу или самостоятельно, эта строка:
https://github.com/veracrypt/VeraCrypt/blob/a108db7c85248a3b61d0c89c086922332249f518/src/Setup/Linux/veracrypt_install_template.sh#L23
tty >/dev/null 2>/dev/null && TTY=1
Чтобы решить проблему, я создал этот фиктивный скрипт
A=0
tty >/dev/null 2>/dev/null && A=1
echo "A is"
echo $A
echo
, если вы назовете этоСценарий inst.sh и запустите его дважды, с и без pipe вы получите разные результаты
# echo xxx | ./inst.sh
A is
0
# ./inst.sh
A is
1
Есть идеи почему? Это может помочь мне решить проблему с veracript (я не могу изменить скрипт установки veracript)
Большое спасибо