En gros, le prog attend une entree, et la transforme.
Maintenant, je voudrais ecrire la meme chose, mais en bash.
Le truc simple comme:
#!/bin/bash
URL=$1
lynx -dump -source | clamdscan - --quiet
if [ $? -eq 0 ]
then
echo $URL
else
echo http://www.virus-jackal.net/infected.php
fi
ne fonctionne pas. Je pense que c'est du au fait que le programme
doit boucler sur lui meme. Mais comment recuperer le $1? Avec un fifo
je pense, mais comment?
Ne pas mettre de quotes autour d'une variable permet de forcer le decoupage en plusieurs /mots/ et de faire d'/expander/ les /wildcards/ dedans. Donc, une variable hors de ses quotes est une liste de patterns de fichiers (separes par les caracteres d'IFS). Si elle ne doit pas etre vue comme telle, alors les quotes sont necessaires.
file_list='/tmp/*.txt /tmp/*.html' set +f; IFS=" "; cmd -- $file_list
file='/tmp/foo.txt' cmd -- "$file"
Apparement, en ZSH, ca ne fonctionne pas comme ca par défaut : quotes ou pas, $file_list constituera un seul argument... À moins d'initialiser le flag SH_WORD_SPLIT...
Stephane Chazelas wrote:
Ne pas mettre de quotes autour d'une variable permet de forcer
le decoupage en plusieurs /mots/ et de faire d'/expander/ les
/wildcards/ dedans. Donc, une variable hors de ses quotes est
une liste de patterns de fichiers (separes par les caracteres
d'IFS). Si elle ne doit pas etre vue comme telle, alors les
quotes sont necessaires.
file_list='/tmp/*.txt /tmp/*.html'
set +f; IFS=" "; cmd -- $file_list
file='/tmp/foo.txt'
cmd -- "$file"
Apparement, en ZSH, ca ne fonctionne pas comme ca par défaut : quotes ou
pas, $file_list constituera un seul argument... À moins d'initialiser le
flag SH_WORD_SPLIT...
Ne pas mettre de quotes autour d'une variable permet de forcer le decoupage en plusieurs /mots/ et de faire d'/expander/ les /wildcards/ dedans. Donc, une variable hors de ses quotes est une liste de patterns de fichiers (separes par les caracteres d'IFS). Si elle ne doit pas etre vue comme telle, alors les quotes sont necessaires.
file_list='/tmp/*.txt /tmp/*.html' set +f; IFS=" "; cmd -- $file_list
file='/tmp/foo.txt' cmd -- "$file"
Apparement, en ZSH, ca ne fonctionne pas comme ca par défaut : quotes ou pas, $file_list constituera un seul argument... À moins d'initialiser le flag SH_WORD_SPLIT...
Stephane Chazelas
2005-02-03, 11:07(+01), cedric: [...]
file_list='/tmp/*.txt /tmp/*.html' set +f; IFS=" "; cmd -- $file_list
file='/tmp/foo.txt' cmd -- "$file"
Apparement, en ZSH, ca ne fonctionne pas comme ca par défaut : quotes ou pas, $file_list constituera un seul argument... À moins d'initialiser le flag SH_WORD_SPLIT...
Oui, on peut dire que zsh (sauf dans les emulations sh et ksh) a corrigé ce probleme. Toutefois,
cmd -- $var
reste un probleme en zsh dans le cas ou $var est vide, car alors $var est transformé en pas d'argument du tout au lieu d'etre transformé en un argument vide.
Meme probleme pour
array=( '1er arg' '' '3e arg' ) cmd -- $array
Où les elements vides sont omis.
Ca devient pire dans:
typeset -A hash hash=( a 'foo' b '' c 'bar' d '' )
avec:
typeset -A other_hash other_hash=( ${(kv)hash} ) # kv pour Key + Value
Mais bon, je parlais de syntaxe POSIX, et en mode POSIX (sh), zsh a les memes problemes, puisque ce comportement est requis par POSIX.
-- Stéphane
2005-02-03, 11:07(+01), cedric:
[...]
file_list='/tmp/*.txt /tmp/*.html'
set +f; IFS=" "; cmd -- $file_list
file='/tmp/foo.txt'
cmd -- "$file"
Apparement, en ZSH, ca ne fonctionne pas comme ca par défaut : quotes ou
pas, $file_list constituera un seul argument... À moins d'initialiser le
flag SH_WORD_SPLIT...
Oui, on peut dire que zsh (sauf dans les emulations sh et ksh) a
corrigé ce probleme. Toutefois,
cmd -- $var
reste un probleme en zsh dans le cas ou $var est vide, car alors
$var est transformé en pas d'argument du tout au lieu d'etre
transformé en un argument vide.
Meme probleme pour
array=(
'1er arg'
''
'3e arg'
)
cmd -- $array
Où les elements vides sont omis.
Ca devient pire dans:
typeset -A hash
hash=(
a 'foo'
b ''
c 'bar'
d ''
)
avec:
typeset -A other_hash
other_hash=(
${(kv)hash}
) # kv pour Key + Value
file_list='/tmp/*.txt /tmp/*.html' set +f; IFS=" "; cmd -- $file_list
file='/tmp/foo.txt' cmd -- "$file"
Apparement, en ZSH, ca ne fonctionne pas comme ca par défaut : quotes ou pas, $file_list constituera un seul argument... À moins d'initialiser le flag SH_WORD_SPLIT...
Oui, on peut dire que zsh (sauf dans les emulations sh et ksh) a corrigé ce probleme. Toutefois,
cmd -- $var
reste un probleme en zsh dans le cas ou $var est vide, car alors $var est transformé en pas d'argument du tout au lieu d'etre transformé en un argument vide.
Meme probleme pour
array=( '1er arg' '' '3e arg' ) cmd -- $array
Où les elements vides sont omis.
Ca devient pire dans:
typeset -A hash hash=( a 'foo' b '' c 'bar' d '' )
avec:
typeset -A other_hash other_hash=( ${(kv)hash} ) # kv pour Key + Value
Mais bon, je parlais de syntaxe POSIX, et en mode POSIX (sh), zsh a les memes problemes, puisque ce comportement est requis par POSIX.
-- Stéphane
Vincent Bernat
OoO En cette fin de matinée radieuse du jeudi 03 février 2005, vers 11:07, cedric disait:
Apparement, en ZSH, ca ne fonctionne pas comme ca par défaut : quotes ou pas, $file_list constituera un seul argument... À moins d'initialiser le flag SH_WORD_SPLIT...
D'ailleurs, je n'ai pas compris comment couper une variable en plusieurs arguments en l'absence de ce flag. Je suppose qu'il doit bien y avoir un moyen simple. -- BOFH excuse #140: LBNC (luser brain not connected)
OoO En cette fin de matinée radieuse du jeudi 03 février 2005, vers
11:07, cedric <rixed@happyleptic.NOSPAM.org> disait:
Apparement, en ZSH, ca ne fonctionne pas comme ca par défaut : quotes ou
pas, $file_list constituera un seul argument... À moins d'initialiser le
flag SH_WORD_SPLIT...
D'ailleurs, je n'ai pas compris comment couper une variable en
plusieurs arguments en l'absence de ce flag. Je suppose qu'il doit
bien y avoir un moyen simple.
--
BOFH excuse #140:
LBNC (luser brain not connected)
OoO En cette fin de matinée radieuse du jeudi 03 février 2005, vers 11:07, cedric disait:
Apparement, en ZSH, ca ne fonctionne pas comme ca par défaut : quotes ou pas, $file_list constituera un seul argument... À moins d'initialiser le flag SH_WORD_SPLIT...
D'ailleurs, je n'ai pas compris comment couper une variable en plusieurs arguments en l'absence de ce flag. Je suppose qu'il doit bien y avoir un moyen simple. -- BOFH excuse #140: LBNC (luser brain not connected)
Stephane Chazelas
2005-02-03, 15:22(+01), Vincent Bernat:
OoO En cette fin de matinée radieuse du jeudi 03 février 2005, vers 11:07, cedric disait:
Apparement, en ZSH, ca ne fonctionne pas comme ca par défaut : quotes ou pas, $file_list constituera un seul argument... À moins d'initialiser le flag SH_WORD_SPLIT...
D'ailleurs, je n'ai pas compris comment couper une variable en plusieurs arguments en l'absence de ce flag. Je suppose qu'il doit bien y avoir un moyen simple.
A adapter suivant comment on veut traiter les champs vides.
-- Stéphane
2005-02-03, 15:22(+01), Vincent Bernat:
OoO En cette fin de matinée radieuse du jeudi 03 février 2005, vers
11:07, cedric <rixed@happyleptic.NOSPAM.org> disait:
Apparement, en ZSH, ca ne fonctionne pas comme ca par défaut : quotes ou
pas, $file_list constituera un seul argument... À moins d'initialiser le
flag SH_WORD_SPLIT...
D'ailleurs, je n'ai pas compris comment couper une variable en
plusieurs arguments en l'absence de ce flag. Je suppose qu'il doit
bien y avoir un moyen simple.
OoO En cette fin de matinée radieuse du jeudi 03 février 2005, vers 11:07, cedric disait:
Apparement, en ZSH, ca ne fonctionne pas comme ca par défaut : quotes ou pas, $file_list constituera un seul argument... À moins d'initialiser le flag SH_WORD_SPLIT...
D'ailleurs, je n'ai pas compris comment couper une variable en plusieurs arguments en l'absence de ce flag. Je suppose qu'il doit bien y avoir un moyen simple.
A adapter suivant comment on veut traiter les champs vides.
-- Stéphane
Kevin Denis
Le 03-02-2005, Stephane Chazelas a écrit :
Ne pas mettre de quotes autour d'une variable permet de forcer le decoupage en plusieurs /mots/ et de faire d'/expander/ les /wildcards/ dedans. Donc, une variable hors de ses quotes est une liste de patterns de fichiers (separes par les caracteres d'IFS). Si elle ne doit pas etre vue comme telle, alors les quotes sont necessaires.
ok
- ne pas utiliser echo
var="-n"
var=''
Le resultat de:
echo "$var"
n'est pas garanti.
certes
Le resultat de
printf '%sn' "$var"
l'est.
ok.
- [ "$?" -eq 0 ] est une noop
noop? no operation?
C'est une no-op dans le sens ou elle ne sert a rien.
comment recuperer a coup sur _toute_ l'entree standard? J'ai l'impression
que squid fait plus que donner l'URL au redirect_program, et je voudrais dissequer un peu tout ca.
Tu la recuperes toute. Ce que je voulais dire, c'est que comme toutes les commandes lancees dans ce script ont leur entree standard connectee vers cette liste d'URL, si par hasard l'une de ces commandes veut poser une question a l'utilisateur, elle va lire la reponse sur son entree standard, mais donc depuis la liste de fichier, au lieu de l'utilisateur.
Ok. Mais c'est curieux, les sites a cookie (genre webmail) ne passent
pas avec ce prog. J'ai bien des demandes de cookie, mais j'ai des authentification refused. (enfin, c'est pas le sujet du newsgroup ici).
- on reserve souvent (par convention) les noms de variables en majuscule pour les variables d'environnement. Ce n'est pas une regle d'or toutefois. Par exemple, IFS et PS1
ne sont pas par defaut dans l'environnement (et n'ont rien a y faire)
Environnement, dans le sens "global a la machine" et non "global pour
un user"?
-- Kevin
Le 03-02-2005, Stephane Chazelas <cette.adresse@est.invalid> a écrit :
Ne pas mettre de quotes autour d'une variable permet de forcer
le decoupage en plusieurs /mots/ et de faire d'/expander/ les
/wildcards/ dedans. Donc, une variable hors de ses quotes est
une liste de patterns de fichiers (separes par les caracteres
d'IFS). Si elle ne doit pas etre vue comme telle, alors les
quotes sont necessaires.
ok
- ne pas utiliser echo
var="-n"
var='\'
Le resultat de:
echo "$var"
n'est pas garanti.
certes
Le resultat de
printf '%sn' "$var"
l'est.
ok.
- [ "$?" -eq 0 ] est une noop
noop? no operation?
C'est une no-op dans le sens ou elle ne sert a rien.
comment recuperer a coup sur _toute_ l'entree standard? J'ai l'impression
que squid fait plus que donner l'URL au redirect_program, et je voudrais
dissequer un peu tout ca.
Tu la recuperes toute. Ce que je voulais dire, c'est que comme
toutes les commandes lancees dans ce script ont leur entree
standard connectee vers cette liste d'URL, si par hasard l'une
de ces commandes veut poser une question a l'utilisateur, elle
va lire la reponse sur son entree standard, mais donc depuis la
liste de fichier, au lieu de l'utilisateur.
Ok. Mais c'est curieux, les sites a cookie (genre webmail) ne passent
pas avec ce prog. J'ai bien des demandes de cookie, mais j'ai des
authentification refused.
(enfin, c'est pas le sujet du newsgroup ici).
- on reserve souvent (par convention) les noms de variables en
majuscule pour les variables d'environnement.
Ce n'est pas une regle d'or toutefois. Par exemple, IFS et PS1
ne sont pas par defaut dans l'environnement (et n'ont rien a y
faire)
Environnement, dans le sens "global a la machine" et non "global pour
Ne pas mettre de quotes autour d'une variable permet de forcer le decoupage en plusieurs /mots/ et de faire d'/expander/ les /wildcards/ dedans. Donc, une variable hors de ses quotes est une liste de patterns de fichiers (separes par les caracteres d'IFS). Si elle ne doit pas etre vue comme telle, alors les quotes sont necessaires.
ok
- ne pas utiliser echo
var="-n"
var=''
Le resultat de:
echo "$var"
n'est pas garanti.
certes
Le resultat de
printf '%sn' "$var"
l'est.
ok.
- [ "$?" -eq 0 ] est une noop
noop? no operation?
C'est une no-op dans le sens ou elle ne sert a rien.
comment recuperer a coup sur _toute_ l'entree standard? J'ai l'impression
que squid fait plus que donner l'URL au redirect_program, et je voudrais dissequer un peu tout ca.
Tu la recuperes toute. Ce que je voulais dire, c'est que comme toutes les commandes lancees dans ce script ont leur entree standard connectee vers cette liste d'URL, si par hasard l'une de ces commandes veut poser une question a l'utilisateur, elle va lire la reponse sur son entree standard, mais donc depuis la liste de fichier, au lieu de l'utilisateur.
Ok. Mais c'est curieux, les sites a cookie (genre webmail) ne passent
pas avec ce prog. J'ai bien des demandes de cookie, mais j'ai des authentification refused. (enfin, c'est pas le sujet du newsgroup ici).
- on reserve souvent (par convention) les noms de variables en majuscule pour les variables d'environnement. Ce n'est pas une regle d'or toutefois. Par exemple, IFS et PS1
ne sont pas par defaut dans l'environnement (et n'ont rien a y faire)
Environnement, dans le sens "global a la machine" et non "global pour