如何通过命令创建日志文件(通过别名)

如何通过命令创建日志文件(通过别名)

ud只需在终端中输入 调用即可。ud在我的定义中如下~/.bash_aliases

alias ud='sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y && sudo apt-get clean -y'

快速搜索后,我发现建议使用以下方法来维护日志文件(使用make install原始帖子中的):

$ make install > file.txt 2>&1

问题就在这里;如果我根据自己的需要进行调整,则无法从以下语法中获得预期的结果:

$ ud > file.txt 2>&1

我得到的结果是命令执行到屏幕标准输出并生成一个 0 字节的文本文件。我希望实现的是为 创建一个类似于以下内容的输出文本文件ls

$ ls > file.txt 2>&1

我可以请人向我解释一下发生了什么事吗?

最后,出现了以下我无法解释的结果:

$ $(ud) > file.txt
La commande « Ign » est introuvable, vouliez-vous dire :
 La commande « tgn » du paquet « tgn » (universe)
Ign : commande introuvable

$ echo $(ud) > file.txt

答案1

在子 shell 中运行命令:

(ud) > file.txt 2>&1

这将使别名中的命令ud在子 shell 中运行,并且所有命令的 STDOUT 和 STDERR 将被定向到父 shell,以便我们可以一次将所有命令的 STDOUT 和 STDERR 从父 shell 重定向到同一个文件。

或者按照@steeldriver 建议的那样,您也可以设置以下别名,以便将所有命令组合在一起,并且它们的 STDOUT 和 STDERR 将立即重定向:

alias ud='{ sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y && sudo apt-get clean -y ;}'

现在您可以按如下方式运行命令:

ud > file.txt 2>&1

现在,让我们看看你做错了什么:

您已将别名设置为:

alias ud='sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y && sudo apt-get clean -y'

现在你运行:

ud > file.txt 2>&1

只有最后一个成功或失败的命令的 STDOUT 和(或)STDERR 才会重定向到file.txt,所有之前的命令都会运行,并且&&下一个命令将根据该命令的退出代码(成功)运行。因此,在您的情况下,所有命令都成功了,并且 as 会默默地从中sudo apt-get clean -y删除所有文件,而不会显示任何 STDOUT,您得到的是一个空文件。.deb/var/cache/apt/archives

相关内容