如何将“apt-file update”的输出重定向到文件中?

如何将“apt-file update”的输出重定向到文件中?

我有一个 zsh 函数可以更新我的系统(.deb包、pip包、texlive 包……)。

它看起来像这样:

up() {
  emulate -LR zsh
  [[ -d "${HOME}/log" ]] || mkdir "${HOME}/log"
  LOGFILE="${HOME}/log/update_system.log"
  __update_system 2>&1 | tee -a "${LOGFILE}"
}

最后一行调用该__update_system函数并将其输出通过管道传输到tee,然后应在终端上显示输出并将其附加到文件中,以便我可以在出现问题时稍后查看它。

执行的命令之一__update_system是:

$ apt-file update

它似乎被执行了,但其输出未记录在文件中。所有其他命令(包括aptitude update)都已记录。

我尝试通过在 shell 中执行这个命令来理解:

$ apt-file update >/tmp/log

再次,apt-file update似乎已执行,但输出未被记录,因为/tmp/log是空的。

我认为也许输出是通过标准错误发送的,因此我尝试:

$ apt-file update >/tmp/log 2>&1

但我得到了相同的结果,一个空文件。

我在 bash 中尝试过,它也给了我一个空文件。


以下是有关我的系统的一些详细信息:

$ uname -a
Linux ubuntu 4.4.0-135-generic #161-Ubuntu SMP Mon Aug 27 10:45:01 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

关于 zsh:

$ zsh --version
zsh 5.5.1-dev-0 (x86_64-pc-linux-gnu)

关于bash:

$ bash --version
GNU bash, version 4.4.0(1)-release (x86_64-unknown-linux-gnu)

关于apt-file

$ aptitude show apt-file
Package: apt-file
State: installed
Automatically installed: no
Version: 2.5.5ubuntu1
Priority: optional
Section: universe/admin
Maintainer: Ubuntu Developers <[email protected]>
Architecture: all
Uncompressed Size: 92,2 k
Depends: perl, curl, libconfig-file-perl, libapt-pkg-perl, liblist-moreutils-perl, libregexp-assemble-perl,
         libfile-temp-perl
Suggests: openssh-client, sudo
Description: search for files within Debian packages (command-line interface)
 apt-file is a command line tool for searching files contained in packages for the APT packaging system. You can search
 in which package a file is included or list the contents of a package without installing or fetching it.

如何将输出重定向apt-file update到文件?

答案1

  • apt-file是一个 perl 脚本。
  • 它用diffindex-下载。那是另一个 perl 脚本。
  • 写信给/dev/tty和不写信给stdout(区别在此解释所以回答
  • 那么...这将记录输出到logfile.log

    script -c "apt-file update" logfile.log
    

相关内容