粘贴多行以便它们一致执行

粘贴多行以便它们一致执行

这是一个非常简单的代码片段的示例,我想以执行所有内容的方式将其粘贴到我的终端。

sudo apt update
sudo apt upgrade


sudo apt -y install build-essential
sudo apt -y install git
sudo apt -y install libxml2-dev # required for some tools using xml files

sudo apt autoremove

不幸的是,如果没有事先安装 build-essential ,会发生什么,它只会运行到sudo apt -y install build-essential.后续行将被跳过。如果未安装 git,情况也是如此:它将运行到 git 行,然后跳过其余部分。

发生这种情况的原因是什么?有没有办法解决这个问题,而无需创建脚本文件并通过 bash 运行它?

答案1

假设您仍在 sudo 的凭据缓存超时范围内(如果您不确定,只需在sudo -v运行代码片段之前刷新它),就会发生该问题,因为 apt(-get) 是一个非常丰富的控制台应用程序,因此即使它不询问您任何内容也会消耗标准输入因为-y.

您可以通过在子 shell 中运行整个代码片段来解决这个问题:

在提示符下,首先输入 a(然后粘贴代码片段,然后输入结束语)并按回车键

应该走了。

请注意,粘贴代码片段后并未立即执行。它而是在命令行上“排队”,等待右括号。

(PS:根据您的系统,您可能需要使用apt-get autoremove代替apt autoremove,并且您可能还需要使用-y onupdateupgrade

答案2

sudo apt upgrade如果命令与命令之间有足够的时间sudo apt install -y build-essentials,那么 SUDO 将再次提示您输入密码。

由于您要将文本粘贴到控制台中,因此下一行将作为 STDIN 接受到 SUDO 提示输入密码。如果该行与您的密码不匹配,身份验证将失败并且该build-essentials行将不会被执行。

相关内容