Swisslinux.org

− Le carrefour GNU/Linux en Suisse −

 

Langue

 

Le Forum

Vous n'êtes pas identifié.

#1 01 Jan 2005 16:11:44

Tengu
Gourou(e) du libre
Lieu: La Tour-de-Peilz
Date d'inscription: 17 Nov 2004
Messages: 493
Site web

[Divers] Un "explode" de chaine en bash

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:

Code:

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!


Science sans conscience n'est que ruine de l'âme

https://twitter.com/swisstengu (compte twitter)
https://blog.tengu.ch/ (un blog parmis tant d'autres)

Hors ligne

 

#2 01 Jan 2005 18:30:00

dake^cdx
Citoyen(ne)
 
Lieu: Monthey
Date d'inscription: 19 Dec 2004
Messages: 26
Site web

Re: [Divers] Un "explode" de chaine en bash

Tu dois pouvoir faire ce que tu veux faire avec awk, un exemple :

Code:

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... smile


Générateur déterministe de mots de passe : http://passkool.sourceforge.net

Hors ligne

 

#3 01 Jan 2005 18:43:50

Tengu
Gourou(e) du libre
Lieu: La Tour-de-Peilz
Date d'inscription: 17 Nov 2004
Messages: 493
Site web

Re: [Divers] Un "explode" de chaine en bash

Donc, en mélangeant les deux...

Code:

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.

@@++


Science sans conscience n'est que ruine de l'âme

https://twitter.com/swisstengu (compte twitter)
https://blog.tengu.ch/ (un blog parmis tant d'autres)

Hors ligne

 

#4 01 Jan 2005 20:25:48

dake^cdx
Citoyen(ne)
 
Lieu: Monthey
Date d'inscription: 19 Dec 2004
Messages: 26
Site web

Re: [Divers] Un "explode" de chaine en bash

Ca devrait fonctionner avec ça :

Code:

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)


Générateur déterministe de mots de passe : http://passkool.sourceforge.net

Hors ligne

 

#5 01 Jan 2005 23:52:42

Tengu
Gourou(e) du libre
Lieu: La Tour-de-Peilz
Date d'inscription: 17 Nov 2004
Messages: 493
Site web

Re: [Divers] Un "explode" de chaine en bash

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 wink de toutes façons, awk n'est pas perdu...

Aller... @@++


Science sans conscience n'est que ruine de l'âme

https://twitter.com/swisstengu (compte twitter)
https://blog.tengu.ch/ (un blog parmis tant d'autres)

Hors ligne

 

#6 02 Jan 2005 12:34:47

dake^cdx
Citoyen(ne)
 
Lieu: Monthey
Date d'inscription: 19 Dec 2004
Messages: 26
Site web

Re: [Divers] Un "explode" de chaine en bash

Ouais, c'est pas mal ce Bash, tant que les choses restent simples smile Pour des scripts plus longs, je pense que c'est mieux de passer par Python.


Générateur déterministe de mots de passe : http://passkool.sourceforge.net

Hors ligne

 

#7 02 Jan 2005 12:44:23

Tengu
Gourou(e) du libre
Lieu: La Tour-de-Peilz
Date d'inscription: 17 Nov 2004
Messages: 493
Site web

Re: [Divers] Un "explode" de chaine en bash

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.

Code:

#!/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


Science sans conscience n'est que ruine de l'âme

https://twitter.com/swisstengu (compte twitter)
https://blog.tengu.ch/ (un blog parmis tant d'autres)

Hors ligne

 

#8 03 Jan 2005 21:04:25

dake^cdx
Citoyen(ne)
 
Lieu: Monthey
Date d'inscription: 19 Dec 2004
Messages: 26
Site web

Re: [Divers] Un "explode" de chaine en bash

Je vais le tester à l'occasion (dès que j'aurai fini de réinstaller un serveur...)


Générateur déterministe de mots de passe : http://passkool.sourceforge.net

Hors ligne

 

#9 03 Jan 2005 23:01:09

Tengu
Gourou(e) du libre
Lieu: La Tour-de-Peilz
Date d'inscription: 17 Nov 2004
Messages: 493
Site web

Re: [Divers] Un "explode" de chaine en bash

Il a une couille monstrueuse ! Si y a pas le fichier, il fait rien neutral

Donc, nouvelle version, testée en toutes conditions. Là, je commence à piger !

Code:

#!/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.


Science sans conscience n'est que ruine de l'âme

https://twitter.com/swisstengu (compte twitter)
https://blog.tengu.ch/ (un blog parmis tant d'autres)

Hors ligne

 

Pied de page des forums

Powered by FluxBB