J'avais l'habitude de travailler pour une entreprise qui avait un shell personnalisé pour la gestion de l'un de leurs produits fonctionnant sous Linux et je cherche à reproduire une fonctionnalité clé de ce shell.
Tout le travail a été effectué par un processus d'arrière-plan et la sortie du journal affichée pour tous les utilisateurs connectés.
Le journal suivrait en arrière-plan votre coque et la ligne d'invite resterait toujours parfaitement en bas.
Par exemple
Log line 1
Log line 2
Log line 3
![ROOT@PRODUCT51-LIVE]:~/ #
La façon dont j'ai essayé de le faire avec bash était de démarrer une queue détachée dans le fichier .bashrc des utilisateurs, mais lorsque la sortie de la commande est envoyée à stdout - elle apparaît sous l'invite bash, par exemple
![ROOT@PRODUCT51-LIVE]:~/ #Log line 1
Log line 2
Log line 3
Et l'utilisateur devrait appuyer sur Entrée ou CtrlCpour une ligne d'invite propre.
Je n'ai pas d'idées sur la façon de faire en sorte que l'invite passe toujours au bas de la sortie et je pense que j'utilise la mauvaise terminologie pour trouver quoi que ce soit sur Google car je n'ai pas de chance - quelqu'un sait-il comment faire cela avec bash?
tail -f
sortie et de l'invite et de la sortie de la commande lorsque vous entrez une commande qui a une quantité importante de sortie, en particulier lorsque votre processus d'arrière-plan envoie activement sa sortie?Réponses:
Ce qui suit fait ce dont vous avez besoin, sans utiliser tmux ou screen ou d'autres programmes. Conserve l'invite en bas. Remplacez "/ var / log / cron" par le fichier dont vous avez besoin:
la clé de ce sont les caractères de contrôle ANSI pour le terminal. En particulier l'instruction "\ e [x; y" qui définit une nouvelle zone de défilement. Ainsi, à mesure que chaque ligne du fichier journal est lue, la ligne du bas de la fenêtre est exclue de la zone de défilement, la ligne du fichier journal est insérée, puis le bas est ajouté à nouveau.
la source
La réponse est écran ou tmux a été utilisé
Je vais vous expliquer comment vous pouvez configurer un tel écran en utilisant
1) Installer l'écran en utilisant soit
apt-get install screen
sur lesyum install screen
dérivés Ubuntu / Debian ou RedHat.2)
screen -S shell_and_logs
3) Appuyez ensuite sur Ctrl+ a, suivi de
S
(S majuscule).Un écran horizontal apparaîtra
4) Appuyez sur Ctrl+ asuivi de TAB
Cela vous amènera à la deuxième fenêtre partagée.
5) Créez une autre fenêtre ici pour obtenir l'invite de commande en appuyant sur Ctrl+ arelâchez les touches puis appuyez sur
c
6) Vous pouvez redimensionner le deuxième windo en appuyant sur Ctrl+ apuis en tapant
:resize
après quoiLines:
apparaîtra. Saisissez le nombre de lignes que vous souhaitez afficher.7) Enfin, vous pouvez basculer entre les fenêtres de Ctrl+ asuivi deTAB
la source
tail -F /var/log/messages &
est une autre façon de vous montrer des messages lorsque quelque chose change, par exemple lorsqu'un échec de connexion est découvert ou lorsqu'un service rencontre des problèmes. Ce n'est cependant pas idéal car cela gâchera votre shell interactif.screen
ettmux
qui peuvent le faire - par exemple, certains BSD sont livrés avec unewindow
commande. Étant donné le choix, je recommanderais cette solution plutôt qu'un shell personnalisé ou les autres options disponibles en raison de sa flexibilité. Il peut ne pas être aussi transparent pour l'utilisateur final, mais ils ne sauront vraiment pas la différence, et les utilisateurs avancés / administrateurs système pourront utiliser la flexibilité supplémentaire offerte parscreen
.t=$(mktemp); printf '%s\n' 'screen tail -F /var/log/messages' split focus screen > "$t"; screen -S screenname -c "$t"
Mettez-le dans un script et exécutez-le chaque fois que vous le souhaitez. Merci à Geirha pour cela sur #bash @ irc.freenode.org