J'essaie de lancer ceci -
watch "ps aux | grep myShittyProcess"
dans une session tmux. Ce processus myShittyProcess
a également été démarré dans une session tmux. Les ps aux
travaux sans surveillance. Mais dès que je le mets en veille, il n’exécute pas. Comment faire en sorte que cela fonctionne?
-- modifier -
Constaté que redimensionner tmux en plein écran le rend efficace. Quelque chose à voir avec le ps
wrapping de sortie et grep
impossible à trouver dans un contexte wrappé.
tmux
. J'ai rencontré ce problème avec et sans (sans =gnome-terminal
dans mon cas).Réponses:
Comme mentionné dans la question edit et la réponse de xzfc , le problème semble être lié au retour à la ligne de tmux. Pour quelque chose de plus proche d'un remplacement de la chute en
ps aux | grep [q]uote
si vous n'avez pas besoin d' informations utilisateur,, essayez:L'
-a
indicateur permet à la sortie d'inclure les arguments de la ligne de commande, tandis que-f
vous permet de rechercher les arguments de la ligne de commande ainsi que le nom du processus.la source
Courir
Explanation:
watch
définit certaines variables env supplémentaires, à savoirCOLUMNS
etLINES
. Cela peut être facilement vérifié en comparantenv | grep COLUMNS
etwatch 'env | grep COLUMNS'
.Quand
COLUMNS
est défini,ps
sa sortie est tronquée à autant de caractères d'une ligne, même si la sortie est dirigée versgrep
(ou quoi que ce soit d'autre). (ps
pourquoi tu me fais ça?) ForcerCOLUMNS
à être vide danswatch
la commande de s est suffisant pour faireps
fonctionner comme prévu (et I).Btw, pour éviter
watch
que lesgrep
processus fassent partie de votre sortie surveillée, envisagez d'ajouter[]
ce qui suit :(Bien sûr, je vous recommande de vous familiariser
pgrep
également. D'autres réponses vous aideront à cela.)la source
ps
est un utilitaire qui produit une sortie lisible par l’homme, et s’appuie sur un texte lisible par l’homme est une mauvaise idée. Vous devriez utiliserpgrep myShittyProcess
au lieu deps aux | grep myShittyProcess
.pgrep
produit une liste nue de pids, et si vous voulez une sortie moins ennuyeuse, vous pouvez passerpgrep
la sortie àps
:Pour utiliser ce one-liner avec
watch
vous, vous devez le mettre entre' '
(et non" "
) pour empêcher le remplacement précoce des commandes de shell:la source