#1451 Le 04/07/2011, à 14:24
- Ghilan
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Salut SandBox, est ce qu'il n'y a pas un problème dans l'url de ta commande ?
'podcast/201../None'
Hors ligne
#1452 Le 04/07/2011, à 19:24
- nordinatueur
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Je me suis inspiré d'un one-liner sur commandlinefu pour faire ce script... Il permet d'insérer une horloge en haut à droite du terminal qui s'actualise à votre guise et avec des couleurs !
Un seul problème, pour le fermer correctement lors d'une mauvaise fermeture d'un terminal il faudrait rajouter ceci dans le bashrc
Même si en réalité, il suffit de supprimer les fichiers dans /tmp ...
_Quitter ()
{
#------------- Horloge -------------#
TTY=$(tty); TTY=${TTY#/dev/}; TTYplat=${TTY//\//_};
rm -vf /tmp/.horloge.sh.${TTYplat}.lock;
#--------------- Fin ---------------#
exit;
}
trap _Quitter EXIT;
Biensûr cette fonction peut être améliorée pour faire d'autres choses comme dire «au revoir $USER» par exemple.
Autre bug aussi avec des applications qui utilisent le terminal interactivement comme un éditeur de texte (vi, emacs, nano, etc.)
Le bug est uniquement graphique et des caractères semblent apparaître un peu partout... Mais on peut la tuer avant et la remettre après...
#!/bin/bash
# Créé par Nordinatueur
#
rouge='\e[31m'; vert='\e[32m'; jaune='\e[33m'; bleu='\e[34m'; rose='\e[35m'; cyan='\e[36m'; gris='\e[37m'; NC='\e[0m';
LOGFILE="/tmp/${0##*/}.log";
TTY=$(tty); TTY=${TTY#/dev/};
TTYplat=${TTY//\//_};
horlogeLock=/tmp/.${0##*/}.${TTYplat}.lock;
couleur=bleu;
tempsDefaut=2;
temps=${tempsDefaut};
continuer=false;
while (( $# )); do
case ${1} in
-e|-E) vim -p ${0}; exit;;
-d|-D) exec 1>${LOGFILE};;
-k|--kill) rm -vf "${horlogeLock}"; exit;;
-t|--time) shift; temps=${1};;
-c|--couleur) shift; couleur=${1};;
*) continuer=true ;;
esac;
shift;
done;
[[ ${temps} =~ [0-9]+ ]] && [[ ${temps} -ge 1 ]] || { temps=${tempsDefaut}; echo "Mauvais temps de rafraîchissement... (défaut ${tempsDefaut}s)";}
[[ -e "${horlogeLock}" ]] && rm -f "${horlogeLock}";
while ps x | grep "${TTY}.*${0##*/}" | grep -v 'grep' | grep -qv "${$}"; do sleep 0.1; done;
>"${horlogeLock}";
(
while [[ -e "${horlogeLock}" ]]; do
tput sc; #Sauve la position du curseur
tput cup 0 $(($(tput cols)-30)); #Déplace le curseur
printf "${!couleur}";
date "+%a %d %B %Y, %X";
printf "${NC}";
tput rc; #Replace le curseur
#sleep ${temps};
i=0; while [[ ${i} -lt ${temps} ]] && [[ -e ${horlogeLock} ]]; do
#Plus lourd, mais permet un changement à la seconde près !
((i++)); sleep 1;
done;
done;
tput sc;
tput cup 0 $(($(tput cols)-30));
printf '%30s';
tput rc;
rm -f "${horlogeLock}";
) &
Dernière modification par nordinatueur (Le 04/07/2011, à 19:33)
Linux User #508094
Pour une meilleure coopération, utilisez des liens relatifs sur le forum !
Hors ligne
#1453 Le 09/07/2011, à 01:20
- SandBox
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Salut SandBox, est ce qu'il n'y a pas un problème dans l'url de ta commande ?
'podcast/201../None'
Ecoute ma commande fonctionne nickel depuis que je l'ai écrite, j'en ai faite un script bash que je lance une fois tout les deux jours et j'ai toujours les nouveautés ^^
Hors ligne
#1454 Le 21/07/2011, à 22:51
- Stratovarius
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
J'ai récrit mon script de récupération des contacts Gmail en perl, ils sont triés par ordre alphabétique. Il est plus propre et plus complet. Je récupère les fichiers avec wget car j'ai pas trouvé comment envoyer des requêtes POST avec des outils perl (ok j'ai pas beaucoup cherché ...). Sinon deux options sont disponibles : -n ou --numbers pour afficher des numéros à cotés des contacts et -v ou --verbose pour afficher la sortie de wget. Si vous avez des idées pour une amélioration, je suis preneur ! Mettre son identifiant et son mot de passe ligne 15.
#!/usr/bin/perl
#Script de récupération des contacts Gmail par Stratovarius
use Getopt::Long; #Utilisation de Getopt pour les arguments
Getopt::Long::Configure( "bundling" ); #Pour utiliser les arguments "collés"
my ($verbose, $numbers, $i) = ('q',,0); #Par défaut en quiet
GetOptions("verbose" => sub {$verbose = ''},
"v" => sub {$verbose = ''},
"n" => \$numbers,
"numbers" => \$numbers);
my ($username, $password) = ('votreid', 'votremotdepasse'); #Username (sans le '@gmail.com') et mot de passe
auth($username, $password, $verbose); #Authentification et récupération du fichier source
my $fichier = `cat ./full`;
my @tableau = split(/\//, $fichier); #Découpe du fichier en ligne, mises dans un tableau
foreach my $line (@tableau) #Grande boucle sur le tableau
{
if($line =~ m/protocol/ || !($line =~ m/'(.*@.*)'/)) #Si la ligne contient ne contient pas d'adresse e-mail ou si elle contient 'protocol' on la supprime
{
$line =~ s/^.*$//g;
next;
}
else
{
$line =~ s/.*'(.+@.+?)'.*/$1\n/; #Sinon récupération des adresses e-mail
}
}
@tableau = sort({$a cmp $b} @tableau); #Classement des adresses par ordre alphabétique
foreach(@tableau) #Nouvelle boucle sur le tableau, affichage des nombres si option '-n'
{
if(/@/)
{
$i += 1;
if($i =~ /^\d{2,}/ && $numbers)
{
print "$i $_";
}
elsif($numbers)
{
print "$i $_";
}
else
{
print $_;
}
}
}
`rm -f auth full`; #Suppression des fichiers intermédiaires
sub auth{
my ($username, $password, $verbose) = @_;
my $auth;
$verbose .= "O";
system("wget -$verbose auth --post-data \"accountType=HOSTED_OR_GOOGLE&Email=$username\@gmail.com&Passwd=$password&service=cp&\" https://www.google.com/accounts/ClientLogin"); #Récupération du token d'authentification dans un fichier avec wget
open(AUTH, "./auth") or die print $!;
while(<AUTH>)
{
if(/Auth/)
{
($auth) = $_ =~ /Auth=(.*)$/; #On isole la clé
}
}
system("wget -$verbose full --header=\"Authorization: GoogleLogin auth=$auth\" 'https://www.google.com/m8/feeds/contacts/default/full?max-results=1000'"); #Récupération du fichier contenant les contacts avec le token
}
Hors ligne
#1455 Le 04/08/2011, à 18:36
- Nanoseb
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Voila voici un petit script de login, celui ci peut être utile si comme moi vous avez activer la connection automatique. En effet ce script va vous demander un code, et si celui ci est faux il va vous prendre en photo avec votre webcam, sonner une allerte et éteindre l'ordinateur. Lors du prochain allumage si le code est bon il va vous montrer la photo de l'imposteur.
dépendances : zenity, imagemagick, aumix, mplayer
#!/bin/bash
cd /home/chemin/des/logs #lieu ou seront enregistré le fichier log et les photos
if [ ! -f "log" ]
then
echo ok >> log
fi
date=`date +%d-%m-%y-%R:%S`
pass='votremotdepasse'
pass2=`zenity --title="Bienvenue $USER" --password`
if [ $pass = $pass2 ]
then
dernier=`tail -n 1 log`
if [ $dernier != ok ]
then
echo ok >> log
display $dernier.png
fi
else
mplayer tv:// -vo png -frames 3 -tv driver=v4l2 #le script prend 3 photos et supprimes les 2 premières, car chez moi la première est verte et la seconde bizarrement découpée
rm 00000001.png 00000002.png
mv 00000003.png $date.png
echo $date >> log
aumix -v 100
mplayer alert.mp3 #perso j'ai pris ceci : http://www.universal-soundbank.com/mp3/sounds/13191.mp3
dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop #commande pour éteindre le l'ordi
fi
Bien-sur ce n'est pas du tout sécurisé...et le mot de passe est en clair dans ce fichier, mais cela suffit pour décourager la plus part des gens et être informé de ce qui ce passe dans votre dos ^^
En tous cas si vous avez des conseils/avis/astuces/critiques/améliorations..., je suis prenneur
Hors ligne
#1456 Le 04/08/2011, à 19:00
- nordinatueur
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Génial ! J'ai hâte de tester ! :-D
Linux User #508094
Pour une meilleure coopération, utilisez des liens relatifs sur le forum !
Hors ligne
#1457 Le 05/08/2011, à 05:55
- YannUbuntu
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Salut
ce script va vous demander un code, et si celui ci est faux il va vous prendre en photo avec votre webcam, sonner une allerte et éteindre l'ordinateur.
Heuu... tu ne laisses même pas une seconde chance ? (si jamais on est mal réveille le matin, avec le volume a fond )
à consulter/améliorer: Guide du Débutant, Logiciels, Ecole, Travail, Maison
Hors ligne
#1458 Le 05/08/2011, à 09:30
- Nanoseb
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Au moins ça réveille, et en plus vous gagnez une photo de vous encore endormi ^^.
Mais oui en effet c'est peut être un peut radical, je vais le modifier pour donner cette seconde chance.
EDIT :
voici le code modifié :
#!/bin/bash
cd /home/chemin/
if [ ! -f "log" ]
then
echo ok >> log
fi
date=`date +%d-%m-%y-%R:%S`
pass='motdepasse'
pass2=`zenity --title="Bienvenue $USER" --password`
if [ $pass = $pass2 ]
then
ok='1'
else
pass3=`zenity --title="Try again" --password`
if [ $pass = $pass3 ]
then
ok='1'
else
ok='0'
fi
fi
if [ $ok = 1 ]
then
dernier=`tail -n 1 log`
if [ $dernier != ok ]
then
echo ok >> log
display $dernier.png
fi
else
mplayer tv:// -vo png -frames 3 -tv driver=v4l2
rm 00000001.png 00000002.png
mv 00000003.png $date.png
echo $date >> log
aumix -v 100
mplayer alert.mp3
dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
fi
Dernière modification par Nanoseb (Le 05/08/2011, à 21:28)
Hors ligne
#1459 Le 05/08/2011, à 09:44
- Levi59
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Je ne dis pas que ton script est inutile mais je me demande pourquoi tu veux rajouter un mot de passe au démarrage après avoir désactivé le mot de passe de session. Autant désactiver l'autologin non?
Hors ligne
#1460 Le 05/08/2011, à 09:49
- Qid
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Bien-sur ce n'est pas du tout sécurisé...et le mot de passe est en clair dans ce fichier, mais cela suffit pour décourager la plus part des gens et être informé de ce qui ce passe dans votre dos
bouarf ... c'est quand meme vachement dommageable moi je trouve mais bon ça peut etre marrant
pour ma part j'en vois par contre pas l'interet mais bon c'est sur que ça peut etre marrant ...
encore faut il avoir une webcam ce qui n'est actuellement pas mon cas ...
"GNU/Linux c'est que du bon mais M$ Windows ce n'est pas si mal"
Référent technique Ubuntu d'un Groupe d'Utilisateur du Libre
plus d'info sur mon profil
Hors ligne
#1461 Le 05/08/2011, à 09:59
- Nanoseb
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
@ Levi 59 :J'ai désactivé l'autologin pour pouvoir booter plus rapidement, du coup là j'ai un mot de passe et en plus je boot plus rapidement qu'avec le login classique. Mais c'est vrai que l’intérêt n'est pas extraordinaire, le but était aussi de me familiariser avec les script bash car je débute dans ce domaine.
Hors ligne
#1462 Le 05/08/2011, à 10:12
- YannUbuntu
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Au fait, pour ceux qui aiment le Bash et veulent se rendre utiles, pouvez-vous jeter un oeil au code de Boot-Repair et m'indiquer ce qui peut être amélioré svp ?
le code peut être téléchargé ici: https://launchpad.net/~yannubuntu/+arch … /+packages
Merci pour votre aide
à consulter/améliorer: Guide du Débutant, Logiciels, Ecole, Travail, Maison
Hors ligne
#1463 Le 05/08/2011, à 23:55
- nordinatueur
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Pour le mot de passe en clair, tu peux utiliser la somme md5 du mot de passe vu que tu le testes toi-même !
À la volée ça donnerait ça :
fichierSauvegardeMDP=~/.sauvegardeMDP.alert
Init ()
{
motDePasse1=0;
motDePasse2=1;
until [[ $motDePasse1 = $motDePasse2 ]]; do
motDePasse1=$(zenity --entry --text "Entrez le mot de passe...") || exit;
motDePasse2=$(zenity --entry --text "Répétez le mot de passe") || exit;
done;
md5sum <<<"$motDePasse1" >$fichierSauvegardeMDP;
}
if [[ -s $fichierSauvegardeMDP ]]; then
pass=$(cat $fichierSauvegardeMDP)
pass2=$(zenity --entry | md5sum );
<le reste ne change pas...>
else
Init ;
fi;
Je sais pas si c'est clair, mais l'idée est là...
EDIT : changer aussi « pass3 » en :
pass3=$(zenity --entry | md5sum )
Dernière modification par nordinatueur (Le 05/08/2011, à 23:57)
Linux User #508094
Pour une meilleure coopération, utilisez des liens relatifs sur le forum !
Hors ligne
#1464 Le 06/08/2011, à 11:32
- Nanoseb
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Merci beaucoup je ne connaissais pas cette fonction, je vais étudier ceci de près.
Hors ligne
#1465 Le 07/08/2011, à 00:44
- nordinatueur
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
C'est la fonction qui est utilisée pour vérifier l'intégrité des fichiers ...
Le code que tu obtiens s'appelle la somme md5 et elle diffère complètement si tu ne changes ne serait-ce qu'un bit du fichier ! (voir entre autres http://doc.ubuntu-fr.org/md5sum)
En l'occurrence je l'utilise sur un fichier contenant uniquement le mot de passe ( modélisé par la redirection bash « <<< » et par le pipe après zenity.
Linux User #508094
Pour une meilleure coopération, utilisez des liens relatifs sur le forum !
Hors ligne
#1466 Le 07/08/2011, à 11:13
- Nanoseb
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Merci pour ces précision, j'ai aussi lu l'article de wikipédia portant sur le md5, c'est très intéressant
Pour ceux que cela intéresse voici le script avec la parti de nordinateur :
#!/bin/bash
cd /home/chemin
if [ ! -f "log" ]
then
echo ok >> log
fi
fichierSauvegardeMDP=sauvegardeMDP
Init ()
{
motDePasse1=0;
motDePasse2=1;
until [[ $motDePasse1 = $motDePasse2 ]]; do
motDePasse1=$(zenity --entry --text "Entrez le mot de passe...") || exit;
motDePasse2=$(zenity --entry --text "Répétez le mot de passe") || exit;
done;
md5sum <<<"$motDePasse1" >$fichierSauvegardeMDP;
}
if [[ -s $fichierSauvegardeMDP ]]; then
date=$(date +%d-%m-%y-%R:%S)
pass=$(cat $fichierSauvegardeMDP)
pass2=$(zenity --title="Bienvenue $USER" --password | md5sum )
if [[ $pass = $pass2 ]]
then
ok=1
else
pass3=$(zenity --title="Try again" --password | md5sum )
if [[ $pass = $pass3 ]]
then
ok=1
else
ok=0
fi
fi
if [ $ok = 1 ]
then
dernier=`tail -n 1 log`
if [ $dernier != ok ]
then
echo ok >> log
display $dernier.png
fi
else
mplayer tv:// -vo png -frames 3 -tv driver=v4l2
rm 00000001.png 00000002.png
mv 00000003.png $date.png
echo $date >> log
aumix -v 100
mplayer alert.mp3
dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
fi
else
Init ;
fi;
J'ai juste deux petites questions à propos de ton code, j'ai remarqué que tu mettais beaucoup de ";" en fin de ligne alors que je n'en mettait jamais auparavant, c'est juste par habitude ou ils ont une utilité ?
Et de même quel est l'intérêt de faire une fonction Init, puisque l'on ne s'en sert qu'une seule fois il ne serais pas plus simple de mettre ce code directement dans le else ?
Merci d'avance pour ces réponses
Hors ligne
#1467 Le 07/08/2011, à 23:42
- nordinatueur
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Pour les points-virgules, c'est parce que j'utilise vim, et parfois pour clarifier certains passages du code j'utilise 'J' pour concaténer la ligne courante avec la suivante et les points-virgules sont obligatoire !
Ça me permet aussi de mieux voir les « vraies » fins de ligne par opposition aux fins comme then, do, ou encore dans un cat <<EOF ... et je vois alors mieux le code ainsi.
En bash ils sont inutiles en fin de ligne.
De la même façon, avec une certaine fonction vim qui corrige automatiquement, je mets des accolades autour de mes noms de variable même quand c'est inutile. C'est plus visuel... Ici comme je le disais j'ai écrit ça vite-fait sans tester...
En effet, ici pour la fonction il vaut mieux ne pas la définir. J'ai fait une fonction pour poster un bout de code sans trop y réfléchir. En général c'est très pratique de faire des fonctions, car on voit mieux l'intérêt des tests if... Sans ça on finit par ne plus se rappeler ce qui était testé quand on lit le else... En revanche, ici vu que le code est relativement petit il vaut mieux éviter. Quand on crée une fonction elle est chargée en mémoire, alors qu'on ne va peut-être pas l'utiliser... Ici c" n'est donc pas utile dans presque tous les cas (tous sauf un.) C'est donc du calcul, du temps et de la mémoire de perdus !
Dans ton code tu devrais mettre un cd « $HOME » au début, et cacher le fichier de mot de passe. C'est moins encombrant (mais c'est un avis personnel.) Ou alors encore mieux ! Tu pourrais carrément créer un dossier caché et tout y mettre ! Le fichier « log » et le fichier de mdp.
Linux User #508094
Pour une meilleure coopération, utilisez des liens relatifs sur le forum !
Hors ligne
#1468 Le 09/08/2011, à 18:02
- Nanoseb
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Merci beaucoup pour toute ces réponses.
Et pour le cd, en faite sur le scripte dont je me sert j'ai fait un cd vers le dossier qui contient tout mes script et tout est enregistré là : capture, log et mdp.
Hors ligne
#1469 Le 26/08/2011, à 10:33
- Nanoseb
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Alors me revoici avec un script un peut plus utile que celui de la dernière fois^^
Celui ci sert a notifier des mails, quand un mail arrive une notification s'affiche, un son se joue et le conky affiche une enveloppe
Il faudra mettre dans un dossier une image transparente, une représentant une envoloppe (ou autre) et un son de notification.
et ajouter une ligne de ce type dans votre conkyrc :
${image /home/seb/soft/mail/1.png -s 48x48 -p 314,149}
et enfin faire une tache cron avec ce script.
Dépendances : notify-send et mplayer
#!/bin/bash
chemin=$HOME/soft/mail
cd $chemin
username="username" #username sans le "@gmail.com"
password="motdepasse"
wget https://"$username":"$password"@mail.google.com/mail/feed/atom
nbmail=`sed -n '/<fullcount>/,1 p' atom | sed 's/<fullcount>//' | sed 's/<\/fullcount>//'`
nbmailold=`sed -n '1 p' logmail`
if [ -z $nbmail ]
then
nbmail=$nbmailold
fi
if [[ $nbmail != $nbmailold ]]
then
if [[ $nbmail > $nbmailold ]]
then
titre=`sed -n '/<title>/,1 p' atom | sed 's/<title>//' | sed 's/<\/title>//' | sed -n '2 p'`
sujet=`sed -n '/<summary>/,1 p' atom | sed 's/<summary>//' | sed 's/<\/summary>//' | sed -n '1 p'`
name=`sed -n '/<name>/,1 p' atom | sed 's/<name>//' | sed 's/<\/name>//' | sed -n '1 p'`
notify-send "$name : $titre" "$sujet" -i $chemin/gmail.png
mplayer dialog-question.wav
fi
echo $nbmail > logmail
if [[ $nbmail > 0 ]] #partie pour le conky
then
cp gmail.png 1.png
else
cp transparent.png 1.png
fi
fi
rm atom
Je me doute bien que ce type de script doit déjà exister, mais c'était aussi un prétexte pour me familiariser avec sed, c'est pourquoi je ne sait pas si enchainer les | est très orthodoxe ^^, si vous avez quelque chose de plus jolie je suis prenneur.
De même si vous avez une idée pour que le mot de passe ne soit pas en clair cela m'intéresserais, j'avais pensée réutiliser les somme md5 mais je ne vois pas trop comment m'en servir dans ce cas.
Hors ligne
#1470 Le 26/08/2011, à 17:13
- Shrat
Hors ligne
#1471 Le 26/08/2011, à 23:20
- nordinatueur
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Salut !
Pour sed, tu peux remplacer
titre=`sed -n '/<title>/,1 p' atom | sed 's/<title>//' | sed 's/<\/title>//' | sed -n '2 p'`
par
titre=$( sed -n '/<title>/s/<title>//;s/<\/title>//p' atom )
ou même :
titre=$( sed -n '/<title>/s,</\?title>,,gp' atom )
Il vaut mieux mettre tous les scripts-sed dans le « même sed » car en faisant des pipes tu augmentes le nombres de processus. Mes lignes n'en comptent qu'un, les tiennes en comptent quatre.
Surtout il faut préférer la syntaxe $( ... ) à l'ancienne dépréciée ` ... ` . C'est en tout cas ce que dit le manuel de bash.
Pour la partie avec les images, un lien symbolique serait mieux non ? Ça t'éviterait de copier une image à chaque fois...
Ça donnerait :
ln -s gmail.png 1.png
( Idem avec transparent.png )
Pour le mot de passe, il faudrait que ton script tourne en boucle infinie et que tu demandes le mot de passe au démarrage du script ... (avec zenity/yad ou en ligne de commande)
Mais de toute façon, dans ta requête
wget https://"$username":"$password"@mail.google.com/mail/feed/atom
le mot de passe apparaît en clair dans l'url. Et on peut donc le récupérer à coups de « ps x | grep atom » si on est patient...
J'étais passé par là il y a un certain temps et j'ai abandonné au profit d'applets pour les panels et pour les docks. J'ai même pensé à faire tout cela dans un petit programme en c (très banal, je n'y connais presque rien !) pour cacher un peu tout ça...
J'espère t'avoir aidé.
Linux User #508094
Pour une meilleure coopération, utilisez des liens relatifs sur le forum !
Hors ligne
#1472 Le 27/08/2011, à 17:10
- Nanoseb
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Merci pour tout ces conseils,
Tout d'abord, ma commande sed prenais uniquement ce qu'il y avais dans la seconde balise <title> (d'où le | sed -n '2 p'), mais avec cette présentation je ne vois pas trop comment remettre ce bout de sed, j'ai essayé
$( sed -n '/<title>/s/<title>//;s/<\/title>//p;2 p' atom )
et d'autre truc sans succès.
ensuite pourrais tu m'expliquer ce que fait concrètement
sed -n '/<title>/s,</\?title>,,gp' atom
Et puis pour le mot de passe, comme rien n'est sécurisé, autant faire un cron qui sera je pense moins lourd qu'une boucle infinie.
Et encore merci pour tout tes messages, c'est vraiment sympa.
Hors ligne
#1473 Le 29/08/2011, à 14:03
- nordinatueur
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Effectivement là je ne vois pas trop comment sed peut le faire...
(Pour l'instant ... je m'y pencherai quand j'aurai le temps.)
Pour la ligne
sed -n '/<title>/s,</\?title>,,gp' atom
Il y a deux choses nouvelles :
- La virgule est utilisé comme délimiteur. En fait la commande « s » de sed peut admettre tout caractère non-alphanumérique pour délimiteur. Même ceux qui ne sont pas visibles (@, !, tabulation, code ascii 1, code ascii 2, etc.)
- Si tu connais un peu les expression rationnelles, le « ? » que j'ai échappé avec un « \ » sert à dire que le caractère précédent apparaît au plus une fois. Cette expression rationnelle </\?title> vérifiera donc uniquement les chaînes <title> et </title>.
Remarque : Tu peux utiliser l'option -r de sed pour les caractères d'expression régulière ne doivent pas être échappés...
sed -n '/<title>/s=</\?title>==gp' atom
sed -nr '/<title>/s|</?title>||gp' atom
- L'option g demande que la substitution soit globale. Sans cette option sed n'opère que la première substitution et ne remplace pas </title>
- Enfin l'option p pour indiquer à sed d'imprimer le texte substitué. (Sans l'option -n les lignes originale ET substituée sont imprimées.)
Une solution que je n'apprécie pas vraiment, mais qui fonctionne en une ligne avec le script sed suivant :
:boucle;
N;
$!b boucle;
s/\n/\ /g;
s,<title>[^<]*</title>,,;
s,\([^<]\|<[^t]\|<t[^i]\|<ti[^t]\)*<title>\([^<]*\)</title>.*,\2,p;
Ou en une vraie ligne :
sed -ne ':boucle; N; $!b boucle; s/\n/\ /g; s,<title>[^<]*</title>,,; s,\([^<]\|<[^t]\|<t[^i]\|<ti[^t]\|<tit[^l]\|<titl[^e]\|<title[^>]\)*<title>\([^<]*\)</title>.*,\2,p;' atom
Pour être vraiment sûr de ne pas faire de bêtise, il faudrait affiner l'expression de la dernière substitution.
Avec toutes mes recherches depuis maintenant bien longtemps, je n'ai toujours pas réussi à interdire une chaîne de caractères simplement. La seule solution que j'ai trouvée consiste à épeler littéralement le mot qui est à interdire dans l'expression rationnelle.
Une autre façon d'épeler <title> est de dire qu'on ne veut pas de <, ou seulement s'il est suivit d'un caractère qui n'est pas un t, ou alors un t qui est suivi d'un caractère qui n'est pas un i ou un i qui ... Et les conditions s'imbriquent...
Voir ici, car le forum ne me permet pas de poster ces lignes...
Ce code qui est plus difficile à lire à l'avantage de faire, pour chaque caractère de la ligne, au plus N tests pour un mot de N lettres. Alors que le précédent en fait au moins N.
Je te conseille, lorsque tu écris un code avec sed, de le tester dans un script séparé avec une commande par ligne. Ensuite tu les regroupes toutes dans une seule ligne en mettant des « ; » entre les commandes (j'y prends l'habitude même en plusieurs lignes...)
Explication du script :
1- :boucle définit une « ancre » dans le script.
2- N indique à sed de mettre la ligne suivante à la suite de la première et de les séparer par \n
3- $!b boucle Si ce n'est pas ( ! ) la dernière ligne ( $ ), branche-toi ( b ) à l'ancre boucle.
4- s/\n/\ /g est une simple substitution...
5- s,<title>\([^<]*\)</title>,, supprimer le premier titre en supposant que le caractère < n'y apparaît pas.
6- Et enfin la dernière substitution, apporte la première occurrence restante de la balise <title>
Je te conseille, lorsque tu écris un code avec sed, de le tester dans un script séparé avec une commande par ligne. Ensuite tu les regroupes toutes dans une seule ligne en mettant des « ; » entre les commandes (j'y prends l'habitude même en plusieurs lignes...)
Explication du script :
1- :boucle définit une « ancre » dans le script.
2- N indique à sed de mettre la ligne suivante à la suite de la première et de les séparer par \n
3- $!b boucle Si ce n'est pas ( ! ) la dernière ligne ( $ ), branche-toi ( b ) à l'ancre boucle.
4- s/\n/\ /g est une simple substitution...
5- s,<title>\([^<]*\)</title>,, supprimer le premier titre en supposant que le caractère < n'y apparaît pas.
6- Et enfin la dernière substitution, apporte la première occurrence restante de la balise <title>
Merci à toi de partager tes initiatives ! C'est grâce à ça que ce forum avance et est une référence pour beaucoup de distributions...
Dernière modification par nordinatueur (Le 29/08/2011, à 14:17)
Linux User #508094
Pour une meilleure coopération, utilisez des liens relatifs sur le forum !
Hors ligne
#1474 Le 29/08/2011, à 14:31
- nordinatueur
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Bon en fait je viens juste de trouver beaucoup plus simple et pour le coup beaucoup plus rapide pour sed (même si on n'est pas à quelques microsecondes près...)
Voilà le script sed :
:boucle;
N;
$!b boucle;
s:<title>[^<]*</title>::;
s:<title>\([^<]*\)</title>.*:<title>\1:;
s:.*<title>::;
Lignes 1 à 3, on met tout sur une ligne !
Ligne 4, on supprime la première occurrence.
Ligne 5, on supprime tout ce qu'il y a après notre titre et on replace la balise <title> ou tout texte facilement identifiable (même avec des caractères non-imprimables sauf le caractère fin de fichier...)
Ligne 6, on se retrouve avec notre titre derrière la seule balise <title> (ou le texte choisi) et on supprime ce qu'il y a avant.
Linux User #508094
Pour une meilleure coopération, utilisez des liens relatifs sur le forum !
Hors ligne
#1475 Le 29/08/2011, à 18:44
- Nanoseb
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Merci, je vais étudier ceci de près
Hors ligne