gpt4 book ai didi

linux - 如果从脚本运行,veracrypt 安装脚本失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:16 25 4
gpt4 key购买 nike

我正在使用 veracryp,需要以非交互模式运行安装脚本。要运行脚本,如果以交互模式运行,我需要将脚本要求的答案传递给它。问题是,如果我通过命令管道或从文件传递答案,我会收到错误消息:

    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 并运行它两次,使用和不使用管道您将得到不同的结果

# echo xxx | ./inst.sh
A is
0

# ./inst.sh
A is
1

知道为什么吗?这可能会帮助我解决 veracript 问题(我无法更改 veracript 安装脚本)

非常感谢

最佳答案

我已经使用 expect 完成了这种自动化(是根据脚本与其他交互程序“对话”的程序)

如果不存在,您需要将其安装到您的 docker 镜像中。

您需要创建一个 expect 脚本,其中包含每个问题的提示和答案。

install-vera-crypt.exp 文件中:

#!/usr/bin/expect -f

set timeout -1
spawn /opt/tdp/veracrypt-1.23-setup-console-x64
expect "The text you expect to answer 1\r"
send -- "1\r"
expect "The text you expect to answer q\r"
send -- "q\r"

...

expect eof

然后你可以执行它:expect -f install-vera-crypt.exp

关于linux - 如果从脚本运行,veracrypt 安装脚本失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58239247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com