Standarddienstprogramm zum Schreiben von stdin in eine Datei ohne stdout?

7

Ich habe zwei Fälle, in denen ich eine Datei erstellen möchte, deren Inhalt über die Standardeingabe bereitgestellt wird:

  1. Ich muss verwenden sudo, um die Berechtigungen zum Erstellen einer Datei zu haben.
  2. Eine Anwendung ruft immer einen (interaktiven) Editor auf, der angegeben ist $EDITOR, um diese Eingabe weiter zu verarbeiten, aber ich möchte stattdessen Daten aus einem Programm weiterleiten.

Im ersteren Fall könnte ich verwenden echo test | sudo bash -c 'cat > test.txt', aber sowohl in diesem als auch im letzteren Fall verwende ich normalerweise teeund leite teedie Standardausgabe an /dev/null:

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

Dies wirft jedoch nicht nur die teeStandardausgabe weg , sondern auch (im letzteren Fall) applicationdie. Es wäre vorzuziehen, die teeStandardausgabe spezifisch unterdrücken zu können , damit ich sofort feststellen kann, ob etwas anderes in die Standardausgabe geschrieben wurde.

Gibt es ein Dienstprogramm für Standard-Linux-Distributionen, das Standardeingaben in die als Befehlszeilenargument angegebene Datei schreibt und nichts ausgibt?

Tim Landscheidt
quelle
Diese Frage klingt wie ein "XY-Problem". Was versuchst du wirklich zu tun?
Spiff

Antworten:

2

Es gibt den wBefehl von sed:

sed -n 'w /tmp/out'

Aber vielleicht sollten Sie einfach Ihr eigenes Skript schreiben mycat:

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

Erstellen Sie ein Verzeichnis ~ / bin und fügen Sie es an der Vorderseite Ihres Pfads hinzu, damit Ihr Befehl gefunden wird.

Sie können sagen, "aber ich benutze Hunderte von Maschinen, sie haben dieses Skript nicht auf ihnen". In diesem Fall ist mein Vorschlag, dass Sie ein Skript erstellen, das einfach Ihre bevorzugte Umgebung auf einem beliebigen Computer einrichtet. Ich habe ein Skript, das im Idealfall, wenn ich Root-Zugriff habe, eine neue Benutzer-ID erstellt, einen Sudoers-Eintrag dafür hinzufügt, einige .bashrc- und bin / * -Dateien kopiert und so weiter. Dann kann ich mich unter dieser ID anmelden und mich "zu Hause fühlen". Außerdem wird mein Befehlsverlauf dann nicht von anderen Administratoren verschmutzt, die Root-Anmeldungen ausführen, und ich führe nicht alle meine Befehle als Root aus.

Ich muss oft an brandneuen Betriebssysteminstallationen auf der getesteten Hardware arbeiten, und diese Art der automatischen Einrichtung ist ein wahrer Segen.

meuh
quelle
2
Leider geht dies nicht auf meine Frage ein. Ich suche nach einem Standarddienstprogramm, das ein Argument verwendet und stdin darauf schreibt. Ich weiß, wie man Wrapper-Skripte schreibt, Software bereitstellt usw.; Diese Anstrengung zu vermeiden, ist der Punkt dieser Frage.
Tim Landscheidt
Ich sed -n 'w /tmp/out'fand das ziemlich cool.
chnrxn