有两种情况我需要创建一个文件并通过标准输入提供其内容:
- 我需要使用
sudo
具有创建文件的权限。 - 应用程序总是调用指定的(交互式)编辑器来
$EDITOR
进一步处理此输入,但我想从程序中传输数据。
在前一种情况下,我可以使用echo test | sudo bash -c 'cat > test.txt'
,但在这种情况下以及在后一种情况下,我通常使用tee
并将tee
的标准输出定向到/dev/null
:
echo test | sudo tee test.txt > /dev/null
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 身份执行所有命令。
我经常需要在被测硬件上安装全新的操作系统,这种自动设置真是一种福音。