Quel est le moyen le plus rapide d'append du text à un file à partir de la command line?

Parfois j'ai l'printing que je veux écrire dans un file alors que je suis au terminal. Je voudrais que ces notes soient toutes dans le même file, juste énumérées l'une après l'autre. Je voudrais aussi une label de date / heure sur chacun d'eux.

Est-il possible de le faire sans avoir à ouvrir le file à chaque fois? Puis-je simplement l'entrer dans le terminal et l'avoir ajouté au file à chaque fois avec une command ou un script?

J'utilise GNU BASH.

Ecrivez-vous un script shell appelé "n". Mettez ceci dedans:

#!/bin/sh notefile=/home/me/notefile date >> $notefile emacs $notefile -f end-of-buffer 

Je recommand ceci au lieu de cat >> notefile parce que:

  1. Un jour, vous serez si pressé que vous tapotterez le >> et tapez> à la place et que vous perdrez votre file.
  2. Emacs démarre en cinq centièmes de seconde sur mon Mac Mini. Cela prend un dixième de seconde pour démarrer sur un système de dix ans basé sur Celeron que j'ai assis autour. Si vous ne pouvez pas attendre si longtime pour commencer à taper, vous êtes déjà une machine et n'avez pas besoin de prendre des notes. 🙂

Si vous insistez pour éviter un éditeur de text, utilisez une fonction shell:

 n () { date >> /home/me/notefile; cat >> /home/me/notefile; } 

qui devrait fonctionner dans toutes les coquilles revendiquant la compatibilité Bourne shell.

Utilisez simplement echo :

 echo $(date) Hi. >> notes.txt 

En outre, pour écrire plusieurs lignes dans un file à partir de la command line, procédez comme suit:

 cat >> sometextfile.txt << EOF text more text and another line EOF 

Beaucoup de cloches et de sifflets soignée ici!

Méthode KISS:

 date >>filename; cat >>filename 

Si ruby ​​est installé sur votre ordinateur, vous pouvez utiliser https://github.com/minhajuddin/taskr . De cette façon, vous obtenez une belle vue de vos notes avec des labels et les heures écastings.

Capture d'écran Taskr

Selon vos besoins, syslogd pourrait être un autre outil à lire. La command

 theuser@tetrad:~$ logger This message is sent to syslog 

va save le message avec la fonction user.notice. Avec de nombreux systèmes Linux, il suffira d'avoir un file /var/log/user.log ouvert et ajouté à d'autres, vous devrez peut-être définir une gestion pour cette installation et le niveau de journalisation (ou, selon votre choix, local0 aux installations locales7 sont généralement libres d'assigner à des choses comme ça.

Il a l'avantage d'être capable d'envoyer des notes de machines clientes vers un server de journalisation central, ce que j'aime utiliser pour garder une trace de l'action administrative car il préserve automatiquement les informations d'horodatage, d'user et d'hôte tout en gardant les actions en ordre .

résultat résultant dans le file local:

 theuser@tetrad:~$ tail /var/log/user.log Jan 31 07:18:37 tetrad theuser: This message is sent to syslog 

Exemple de ligne de configuration syslog sur Solaris :

 local5.notice ifdef(`LOGHOST', /var/log/diary, @loghost) 

Remarque: ifdef est prétraité avec m4 , sur la machine avec hostname / hostalias "loghost", les messages seront enregistrés dans le file / var / log / diary, sur tous les autres, ils seront envoyés au service syslog distant au loghost. Pour tester ce type de configuration, le file de configuration peut être envoyé via m4 pour l'extension (laissez le -D LOGHOST pour voir à quoi il ressemblerait sur un système qui n'est pas appelé loghost :

 theuser@solstice$ /usr/ccs/bin/m4 -D LOGHOST /etc/syslog.conf 

Taskwarrior peut faire ce que vous voulez un peu mieux qu'un simple script shell. Le didacticiel de 30 secondes devrait vous dire si j'ai raison ou tort.

 echo "`date` text here" >> filename 

ou

 echo "text here `date`"|tee -a filename 

plus sur le tee

En combinant quelques réponses différentes pour atteindre ce que je cherchais, ce qui était de multiples options.

  1. Rapide
     user @ hostname: ~ / Documents $ text echo >> nom de file
     user @ nom_hôte: ~ / Documents $ cat nom_file
     text
    
  2. Lignes multiples
      user @ nom_hôte: ~ / Documents $ cat >> nom_file2 << EOF
     > ligne de text 1
     > ligne de text 2
     > ligne de text 3
     > EOF
     user @ nom_hôte: ~ / Documents $ cat nom_file2  
     ligne de text 1
     ligne de text 2
     ligne de text 3
    
  1. Modifier un file à un numéro de ligne donné

     user @ nom_hôte: ~ / Documents $ sed -i '2iinserting nouvelle ligne' nom_file2
     user @ nom_hôte: ~ / Documents $ cat nom_file2
     ligne de text 1
     insert une nouvelle ligne
     ligne de text 2
     ligne de text 3