【问题标题】:bash command to select installation option #2 in the script shownbash 命令在显示的脚本中选择安装选项 #2
【发布时间】:2020-05-26 09:53:28
【问题描述】:

我正在尝试创建一个可以在 CentOS7 系统上安装(自动)veracrypt 的脚本

下载的 veracrypt 文件为 .bz2 文件 (veracrypt-1.23-setup.tar.bz2)。解压 bzip 文件bzip2 -dk veracrypt-1.23-setup.tar.bz2 后,然后解压缩生成的 .tar 文件tar -xf /home/$USER/veracrypt-1.23-setup.tar。此时我可以(如果我)从 bash 终端手动调用 veracrypt 脚本 ./veracrypt-1.23-setup-gui-x64 我会看到以下 veracrypt 安装程序提示。

veracrypt 安装程序提示正在寻找用户按键盘上的数字 1 或 2,然后 Enter(我手动输入到下面显示的提示窗口中以进行可视化),然后再次按 Enter 继续获取许可证协议。

我正在寻找一个 bash 命令,它会简单地选择(或输入)数字 2,然后代表我输入,这样我就不需要与提示进行交互。

我在脚本中尝试了以下命令,但无济于事:

    #!/bin/bash
    cp ./veracrypt-1.23-setup.tar.bz2 /home/$USER
    cd /home/$USER
    bzip2 -dk veracrypt-1.23-setup.tar.bz2
    tar -xf /home/$USER/veracrypt-1.23-setup.tar
    echo -n '2' | ./veracrypt-1.23-setup-gui-x64

还有

    #!/bin/bash
    cp ./veracrypt-1.23-setup.tar.bz2 /home/$USER
    cd /home/$USER
    bzip2 -dk veracrypt-1.23-setup.tar.bz2
    tar -xf /home/$USER/veracrypt-1.23-setup.tar
    ./veracrypt-1.23-setup-gui-x64 2

如果我能找到将输入传递给脚本的命令,我很确定我可以更改该命令以继续完成许可协议的其余部分。

提前感谢您的支持。

【问题讨论】:

    标签: bash automation scripting


    【解决方案1】:

    您可以使用 Here Document,请参阅 Here Documents 部分下的 man bash。这将允许您将输入重定向到 veracrypt 安装程序,就好像它来自 stdin。您可以添加到您的脚本中:

    ./veracrypt-1.23-setup-gui-x64 << EOF
    2
    EOF
    

    这应该会照顾你。如果您有任何问题或其他问题,请告诉我。 (您可以将heredoc sigil 从EOF 更改为您喜欢的任何东西,只要它是一致的)此外,不要在没有看到使用连字符的手册页的情况下缩进heredoc(尽管我不建议您这样做,因为您必须这样做使用tab 字符,因为spaces 不行。

    另一种选择是将2 传递给安装程序,例如

    echo "2" | ./veracrypt-1.23-setup-gui-x64
    

    (不包括-n

    两者都完成同样的事情。关键是2 必须对stdin 上的安装程序可用,而不是作为参数。

    【讨论】:

    • 非常感谢您的帮助和对我帖子的回复。但是,我应该提到我在原始帖子中尝试过的更多技术。您在上面列出的两种方法是我在发布问题之前尝试的一些其他方法。这两种方法都不起作用,但是整个网络都提供了这些和其他几乎相同的解决方案。例如,我还尝试了 cat "vc_answers.txt"。 | ./veracrypt-1.23-setup-gui-x64(其中列出了每行值的 .txt 文件)。
    • 当我的脚本的最后一行被您的解决方案替换时,安装程​​序会正常打开;就好像我直接在终端中输入了命令一样。抱歉,我无法包含屏幕截图,但我可以确认会发生什么。感谢您的帮助。
    • 这是可以解决的,但veracrypt 可能会做一些奇怪的事情。我去看看能不能找到副本下载试试。另外,试试./veracrypt --help 看看是否有--auto-agree-with-license 选项等。
    • 非常感谢。我将尝试 ./veracrypt --help。此外,我将尝试找到一个可以解释 veracrypt 如何处理标准输入的 .readme 文件。高度赞赏。
    • 这就是问题所在。从第 398 行 cp "$0" "$SCRIPT_COPY"exec "$SCRIPT_COPY" --phase2 -- $initargs。正在发生的事情是veracrypt 安装程序创建了一个临时目录,创建了安装脚本的副本,然后将当前进程替换为执行安装脚本副本的新进程。这个复制/执行的效果是它意味着原始的stdin 不再绑定到实际运行安装的脚本。我不会说这不能完成,但你必须找到一种方法来为安装程序的副本提供输入stdin
    猜你喜欢
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多