将标准输入写入没有标准输出的文件的标准实用程序?

Tim*_*idt 12 linux shell

我有两种情况,我想创建一个文件,其内容在标准输入上提供:

  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 发行版上是否有一个实用程序可以将标准输入写入指定为命令行参数的文件而不输出任何内容?

meu*_*euh 6

有以下w命令sed

sed -n 'w /tmp/out'
Run Code Online (Sandbox Code Playgroud)

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

#!/bin/bash
cat >"${1?}"
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 不幸的是,这并没有解决我的问题。我正在寻找一种标准实用程序,它接受一个参数并将 stdin 写入其中。我知道如何编写包装脚本、部署软件等;避免这种努力是这个问题的重点。 (2认同)
  • 我虽然 `sed -n 'w /tmp/out'` 很酷。 (2认同)