将 stdin 写入没有 stdout 的文件的标准实用程序?

将 stdin 写入没有 stdout 的文件的标准实用程序?

有两种情况我需要创建一个文件并通过标准输入提供其内容:

  1. 我需要使用sudo具有创建文件的权限。
  2. 应用程序总是调用指定的(交互式)编辑器来$EDITOR进一步处理此输入,但我想从程序中传输数据。

在前一种情况下,我可以使用echo test | sudo bash -c 'cat > test.txt',但在这种情况下以及在后一种情况下,我通常使用tee并将tee的标准输出定向到/dev/null

  1. echo test | sudo tee test.txt > /dev/null
  2. echo test | EDITOR=tee application > /dev/null

但是,这不仅会丢弃tee的标准输出,还会application丢弃 的标准输出(在后一种情况下)。最好能够专门抑制 的tee标准输出,这样我就可以立即注意到是否有其他内容写入标准输出。

标准 Linux 发行版上是否存在一个实用程序,它可以将标准输入写入指定为命令行参数的文件而不输出任何内容?

答案1

w以下命令sed

sed -n 'w /tmp/out'

但也许你应该编写自己的脚本mycat

#!/bin/bash
cat >"${1?}"

创建一个目录 ~/bin 并将其添加到 PATH 的前面,以便找到您的命令。

您可能会说,“但我使用数百台机器,它们上面没有这个脚本”。在这种情况下,我的建议是创建一个脚本,只需在任何您想要的机器上设置您喜欢的环境即可。我有一个脚本,理想情况下,当我拥有 root 访问权限时,它会创建一个新的用户 ID,为其添加 sudoers 条目,复制一些 .bashrc 和 bin/* 文件,等等。然后我可以用该 ID 登录并“感到宾至如归”。此外,我的命令历史记录不会被其他管理员以 root 登录所污染,而且我也不会以 root 身份执行所有命令。

我经常需要在被测硬件上安装全新的操作系统,这种自动设置真是一种福音。

相关内容