Vous n'êtes pas identifié.
Hello!
Petite question. Je suis en train de faire "ze script" qui permettra de récupérer automatiquement le PID d'un programme lors d'une connexion.
Bon, en gros, voici ce que j'ai:
ps faux |grep $USER |grep SCREEN |grep Ss
Ceci me ressort toute la ligne de ps. Sachant que le PID est la deuxième chaîne de caractère, à longueur variable (pour le moment, j'en ai vu de 3, 4 et 5 caractères) Y a-t-il moyen de sortir uniquement le pid ? Sinon, les users qui viendront risquent de pas trop piger ce qu'ils doivent entrer pour
screen -rd [pid]. Je préfère prévenir que guérir, voudrais pas trop voir un compte avec 4 screens lancés avec les mêmes prog parce que l'utilisateur n'a pas su quoi faire. Surtout que les autres infos ne sont pas utiles pour récupérer un screen.
Voilà, donc la question reformulée après ces précisions, y a-t-il moyen de soit faire un "explode" selon les espaces (plusieurs) permettant de mettre différentes chaines dans des variables différentes ?
Si non... Avez-vous une autre solution ?
Merci d'avance!
Hors ligne
Tu dois pouvoir faire ce que tu veux faire avec awk, un exemple :
ps -ef | awk '{print $2}'
Ca va te printer tous les PID. Tu peux donc normalement récupérer la variable $2 pour chaque ligne. Je sais plus exactement comment car awk est une vraie usine à gaz mais ça doit être possible...
Hors ligne
Donc, en mélangeant les deux...
var1=`ps faux |grep $USER |grep SCREEN |grep Ss` var1 | awk'{$2}' >> fichier_cible
Tu penses que c'est bon ?
Là, je suis dans l'incapacité de tester: le serveur qui aura ce script est en cours d'installation (le provisoire est débraché, bref, à plus les tests...)
Merci.
@@++
Hors ligne
Ca devrait fonctionner avec ça :
ps -faux | grep $USER | grep SCREEN | awk '$2 != "PID" {print $2}' > cible
Si tu passes par une variable, il y aura des problèmes avec les retours de ligne, c'est mieux de faire un pipe avec toutes les commandes nécessaires. Normalement, en utilisant un ps -faux avec un awk, tu auras un warning du genre "bogus syntax blabla,..", ça n'a pas de conséquence. Il disparait si tu utilises plutôt un ps -ef (dans ce cas, la string "PID" apparaît et il faut l'éliminer avec awk)
Hors ligne
Ok. Je débute avec le bash. Mais c'est marrant :p
Je vais tester tout ça, maintenant que le serveur est remis tout beau. J'ai contourné le truc en "ciblant" la sortie de screen -ls avec grep, mais le soucis: ca fait 2 sorties... (attached ou detached)
Je vais tester. J'hésite, parce qu'avec le screen -ls, y a le nom de la screen. Enfin, je vais voir de toutes façons, awk n'est pas perdu...
Aller... @@++
Hors ligne
Ouais, c'est pas mal ce Bash, tant que les choses restent simples Pour des scripts plus longs, je pense que c'est mieux de passer par Python.
Hors ligne
Finalement, j'ai repris ton code, il est plus efficace et j'en ai profité pour faire un script de génération auto du fichier .screenrc (toujours en rapport avec le programme screen)
Il tourne plutôt bien, mais voudrais savoir si y a des "astuces" utilisables. Je vous le mets ici.
#!/bin/sh ################################################## # Create .screenrc file in home of users using it# # This file is usefull to launch screen with # # programmes allready launched # ################################################## # Welcome and so on.. echo "" echo "This script create .screenrc file in your home directory" # Let's go whith scripting!! # just test if file allready exists: if [ -f ".screenrc" ]; then echo "--------------------" echo " WARNING " echo"---------------------" echo "File .screenrc allready exists!!!!" echo -n "Do you want to erase it? [N/y] " read rep case $rep in "y" | "Y" ) # header, creating .screenrc echo " # ------------------------------------------------------------------------------ # SCREEN SETTINGS # File generated by makescreen # ------------------------------------------------------------------------------ nethack on #display stupide warning messages #defflow on # will force screen to process ^S/^Q deflogin on #autodetach off # turn visual bell on vbell off # define a bigger scrollback, default is 100 lines defscrollback 1024 " > .screenrc echo -n "Do you want the "welcome message" of screen? [N/y]" # welcome message si a shit! read mess case "$mess" in "y" | "Y" ) echo "#startup_message off" >> .screenrc ;; "n" | "N" ) echo "startup_message off" >> .screenrc ;; * ) echo "startup_message off" >> .screenrc ;; esac echo -n "How many programms do you want to launch? [1-9]" read nb echo "# Here you can add programms. just write "screen [name]"" >> .screenrc # if someone want to edit file for numero in `seq $nb` do echo "Name of programm "$numero": " read prg echo "screen "$prg >> .screenrc done echo "Your file is ready, written and all seems to be in order. Just launch now pscreen [name] to launch screen..." echo "If you want to add or remove programms: emacs .screenrc in your home directory..." echo "" exit ;; "n" | "N" ) echo "Perhaps rename it if you really want to generate a new one:n mv .screenrc screenrc.bck" exit ;; * ) echo "Perhaps rename it if you really want to generate a new one:n mv .screenrc screenrc.bck" exit ;; esac fi
Merci de me dire ce que tu en penses. Le but est de rendre l'utilisation de screen plus simple pour certaines personnes de ma connaissance qui ont un tout petit peu de peine avec les commandes :p
Hors ligne
Je vais le tester à l'occasion (dès que j'aurai fini de réinstaller un serveur...)
Hors ligne
Il a une couille monstrueuse ! Si y a pas le fichier, il fait rien
Donc, nouvelle version, testée en toutes conditions. Là, je commence à piger !
#!/bin/sh ################################################## # Create .screenrc file in home of users using it# # This file is usefull to launch screen with # # programmes allready launched # ################################################## # some functions if [ -z $1 ] && [ -f ".screenrc" ] || [ $1 != "-f" ]; then echo "File already exists... Please use makescreen -f to force script..." exit 0 else # Welcome and so on.. echo "" echo "This script create .screenrc file in your home directory" # Let's go whith scripting!! # header, creating .screenrc echo " # ------------------------------------------------------------------------------ # SCREEN SETTINGS # File generated by makescreen # ------------------------------------------------------------------------------ nethack on #defflow on # will force screen to process ^S/^Q deflogin on #autodetach off # turn visual bell on vbell off # define a bigger scrollback, default is 100 lines defscrollback 1024 " > .screenrc echo -n "Do you want the "welcome message" of screen? [N/y]" # welcome message si a shit! read mess case "$mess" in "y" | "Y" ) echo "#startup_message off" >> .screenrc ;; "n" | "N" ) echo "startup_message off" >> .screenrc ;; * ) echo "startup_message off" >> .screenrc ;; esac echo -n "How many programms do you want to launch? [1-9]" read nb echo "# Here you can add programms. just write "screen [name]"" >> .screenrc # if someone want to edit file for numero in `seq $nb` do echo "Name of programm "$numero": " read prg echo "screen "$prg >> .screenrc done echo "Your file is ready, written and all seems to be in order. Just launch now pscreen [name] to launch screen..." echo "If you want to add or remove programms: emacs .screenrc in your home directory..." echo "" exit fi
L'erreur de l'autre est que le contrôle foirait complètement et si je l'avais repris, il m'aurait fallu copier-coller des portions entières de codes. Finalement c'est très pas bon !
Maintenant, il tourne. Je suis vraiment content de ce petit truc.
Hors ligne