tee
peut rediriger l'entrée standard canalisée vers la sortie et le fichier standard .
echo Hello, World! | tee greeting.txt
La commande ci-dessus afficherait le message d'accueil sur l'écran du terminal et l'enregistrerait dans le contenu du greeting.txt
fichier, créant le fichier s'il n'y en a pas de ce nom.
Il y a aussi un -a
commutateur pour tee
ajouter au fichier existant au lieu de l'écraser.
Existe-t-il un moyen pratique de rediriger l'entrée canalisée vers la commande et la sortie standard au lieu du fichier?
J'essaie de créer un script wrapper pour buku
copier dans la sélection principale l'URL du signet spécifié par son numéro d'index.
# bukuc:
#!/bin/sh
url=$(buku -f 1 -p $1 | cut -f 2) # NUMBER : URL
echo $url # DISPLAY
echo $url | xsel # PRIMARY SELECTION
Ici, j'utilise echo
deux fois, d'abord pour l'affichage sur le terminal, puis l'enregistrement dans la sélection principale (presse-papiers).
J'imagine quelque chose echo $url | teeC xsel
ou un raccourci pour afficher la sortie avant de passer à la commande suivante (commandes de chaînage), ce qui me permettrait de chaîner la commande entière sur une seule ligne sans avoir besoin d'enregistrer le résultat dans une variable comme suit:
buku -f 1 -p $1 | cut -f 2 | teeC xsel
Je peux également l'utiliser avec urlview
pour afficher, sélectionner et ouvrir avec les éléments $BROWSER
suivants:
bukuc 10-20 | urlview
tee /dev/tty
outty0
(ne vous souvenez pas exactement ... je suis sur la route)info tee
mentionne la substitution de processus, et la sortie de pipe tee à un programme ...Réponses:
C'est simple dans les shells qui supportent la substitution de processus , par exemple bash
Sinon, vous pourriez utiliser un FIFO (bien qu'il manque de commodité)
la source
sh
(Bourne shell) ne prend pas en charge cette fonctionnalité; 2. La flèche doit rester en tant que partie de l'opérateur unique>()
pour la substitution de processus.L'analogue direct de "tee for
pee
command " est la commande de moreutils (tee
, mais avec des tuyaux). Ses arguments sont utilisés comme des commandes à exécuter, pas comme des chemins d'accès, et ils obtiennent l'entrée dirigée vers eux plutôt que écrits dans un fichier. Toutes les commandes reçoivent l'entrée standard à laquelle vous avez acheminépee
comme leur propre propriété.En utilisant
pee
, vous pouvez obtenir le résultat souhaité en lui disant de s'exécuter à la foisxsel
etcat
avec l'entrée.Il y a un
cat
processus supplémentaire flottant pour faire la sortie, ce qui n'est pas vraiment un problème pour votre cas d'utilisation mais pourrait être moins idéal à d'autres moments. Cela fonctionne avec n'importe quel shell, contrairement à la substitution de processus, mais bien sûr, il nécessite l'installation d'un outil supplémentaire (probablement moins courant).Vous pouvez donner des commandes plus complexes en les citant:
pee "xsel --display :1" cat
. Ils sont exécutés avecsh
, vous devez donc faire attention aux métacaractères shell.la source