7

У меня есть два случая, когда я хочу создать файл с его содержимым, поступающим на стандартный ввод:

  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 ответ1

2

Есть команда w для sed:

sed -n 'w /tmp/out'

Но, возможно, вам стоит написать собственный скрипт mycat:

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

Создайте каталог ~/bin и добавьте его в начало списка PATH, чтобы ваша команда была найдена.

Вы можете сказать: «Но я использую сотни машин, на них не будет этого сценария». В этом случае я предлагаю вам создать скрипт, который просто устанавливает предпочитаемую среду на любой машине, которую вы хотите. У меня есть скрипт, который, в идеале, когда у меня есть root-доступ, создаст новый идентификатор пользователя, добавит для него запись sudoers, скопирует некоторые файлы .bashrc и bin/* и так далее. Затем я могу войти под этим идентификатором и "чувствовать себя как дома". Кроме того, моя история команд не загрязняется другими администраторами, выполняющими root-входы, и я не выполняю все свои команды как root.

Мне часто приходится работать над установкой новой ОС на тестируемом оборудовании, и такая автоматическая настройка - настоящее благословение.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .