编辑:

编辑:

我想要做的是:每当命令apt-get install运行并终止时,立即运行另一个命令,而无需用户参与。就我而言,我想运行一个脚本,但由于我可以用命令代替它,因此最好使用命令作为示例。

顺便说一句,我不想​​运行执行两个命令的脚本,因为必须手动执行它,这不是我想要的。命令的终止apt-get install必须提示执行另一个命令。

笔记:这看起来像是问题,虽然我确实有答案,但我想清楚地表达我的意图,以防有其他可能的解决方案,同时也向其他潜在的观众阐明我的要求。

编辑:

澄清:我正在尝试获取一个运行两个的命令!
为什么?我想生成一个文件,其中包含我的发行版上所有已安装的依赖项和软件的列表,该文件每次apt-get install使用命令时都会更新。

答案1

困难的部分是正确解析参数。您可以apt-get install pkgname轻松处理简单的情况,但是一旦您想要处理apt-get -y install pkgname附加情况,您就会突然需要一个功能齐全的选项解析器。

假设简单的情况已经足够了,类似这样的包装脚本就足够了:

#!/bin/bash

/usr/bin/apt-get "$@"
status=$?

if [[ $1 = install ]]; then
    read -rp 'Run this other thing too [Y/n]? ' ans
    if [[ ${ans:-y} = [Yy] ]]; then 
        other-thing
        exit # exit with other-thing's exit status.
    fi
fi

exit "$status" # exit with apt-get's exit status.

答案2

有几种方法,取决于您的意图。

可以使用;分隔符来顺序执行。它将按顺序执行,每个命令都会运行,而不管前一个命令的退出状态如何。例如:

echo hello; printf "\n\n%s" WORLD

条件执行可以通过布尔运算符||和来完成&&。有了这些,第二个程序的执行取决于第一个程序的退出状态(第一个和第二个从左到右读取)。

因为&&行为如下:COMMAND1 && COMMAND2,如果COMMAND1成功终止,COMMAND2将运行。您可以将其记为“如果左成功,则右将运行;如果左失败,则右将不会运行” [ -f /etc/passwd ] && echo "/etc/passwd 存在"

因为||它的反义词是“如果左派成功,右派就不会跑;如果左派失败,右派就会跑”

[ -d /etc/passwd ] || echo "/etc/passwd is not a directory"

要将这些放入一个命令中,有几个选项。一个显然是脚本,但正如您所要求的,您不需要脚本。另一种方法是bash 函数或者别名

我们优先选择 Bash 函数,因为如果您愿意的话,可以向它们传递参数。

在您的具体情况下,您需要apt-get install可能需要多个参数

function installStuff
{
  apt-get install "$@"
  command2
}

将其放入你的.bashrc顶部某处,关闭.bashrc并运行source .bashrc。现在你有一个 bash 函数,它总是apt-get install首先运行,请求任意数量的包,然后立即command2

就像这样

installStuff package1 package2 package3

对于 command2 的条件运行,请使用我已经提到的&&和运算符。||

相关内容