Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 01/11/2016, à 17:08

Watael

Re : Extraire le premier et le n ième mot d'une sortie de commande ?

si tu ne mets pas de guillemets, ce sera considéré comme une variable (vide, puisque non définie au préalable).


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#27 Le 01/11/2016, à 17:50

Bybeu

Re : Extraire le premier et le n ième mot d'une sortie de commande ?

Pire: pour cette possibilité, c'est mort pour moi :

./test: export: line 5: illegal option -f

ça doit viendre du shell rikiki de busybox .

Bon, ça a du bon, ça simplifie les possibilités smile ... voyons côté des prestations buccales...

Hors ligne

#28 Le 02/11/2016, à 10:36

credenhill

Re : Extraire le premier et le n ième mot d'une sortie de commande ?

hello

$ mafonc () { echo "> $1 <"; }; export -f mafonc
$ awk 'BEGIN{ system("mafonc " "bla")}'
sh: mafonc: not found
$ awk 'BEGIN{ system("bash -c \" mafonc bla \" ")}'
> bla <

Hors ligne

#29 Le 02/11/2016, à 14:11

Watael

Re : Extraire le premier et le n ième mot d'une sortie de commande ?

donc, tu ouvres un shell pour appeler awk, qui appelle sh, qui appelle bash !?

je trouve ça tortueux (je suis peut-être trop sensible XD).

Dernière modification par Watael (Le 02/11/2016, à 14:42)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#30 Le 02/11/2016, à 21:28

Bybeu

Re : Extraire le premier et le n ième mot d'une sortie de commande ?

Au secours, je vais perdre mon cheveu et me transformer en chèvre :
J'ai abandonné les fonctions à cause de l'export pas copain avec -f
Je fais avec des variables pour les commandes iptables :

iLI="iptables -nvL INPUT --line-numbers"
iDI="iptables -D INPUT "
iII="iptables -I INPUT "
iRI="iptables -R INPUT "
iLF="iptables -nvL FORWARD --line-numbers"
iDF="iptables -D FORWARD "
iIF="iptables -I FORWARD "
iRF="iptables -R FORWARD "

Ça marche cool comme ça :

## (del rule ACCEPT udp dhcp wan)
# $iDI`$iLI|grep vlan2|grep ":67 dpt:68"|cut -d" " -f1`  # (+ court qu'avec awk)
## (Add br1 to existing DROP udp520 br0 rule)
# $iRI`$iLI|awk '/br/&&/t:520/{ printf("%s -j %s -i br+ -p udp --dp 520",$1,$4) }'`

Mais pour la suivante il m'a fallu 2 jours de cogite et d'essais foireux pour finir par me décider à essayer de sortir du cadre et trouver comment me passer de awk pour récupérer une variable en nvram, tout à la fin:

##DROP std http from anywhere but lo (lan access w https or wan w ssh -L )
$iRI`$iLI|awk 'BEGIN{IGNORECASE = 1};/ACCEPT/&&/br0/&&!/NEW/{ printf("%s -j DROP -i ! lo -p tcp --dp ",$1)}';nvram get http_lanport`

J'ai pas trouvé comment la récupérer depuis awk en imbriquant le system() dans le printf ou en le mettant à côté. Au mieux :

root@rout:~# $iLI|awk...
5 -j logaccept -i ! lo -p tcp --dp 80
0root@rout:~# 
même pas la peine d'aller plus loin
ou alors
root@rout:~# $iLI|awk...
5 -j logaccept -i ! lo -p tcp --dp 80
root@rout:~# 
mais alors
root@rout:~# $iRI`$iLI|awk '/br/&&/t:520/{ prin...
iptables v1.3.7: Unknown arg `-0'
root@rout:~#

J'espère que j'aurai pas besoin d'une deuxième variable...
Et PS, @Watael, ton truc

blabla | iptables -R -

ça marche pas avec iptables. C'était beau sinon. J'ai cherché pourquoi, gromossodo c'est juste supporté par certains utilitaires qui sortent sur stdout comme cat, je pige pas pourquoi. Ça aurait pu avec iptables -L mais même-pas, alors avec avec -R|A|D|I n'en parlons pas.

INPUT|iptables -L -
-sh: INPUT: not found
iptables v1.3.7: unknown arguments found on commandline

Voir ici

tldp.org a écrit :

-

    redirection from/to stdin or stdout [dash].

@+ sur la même chaîne  cool
re PS : heureusement que je suis pas payé comme codeur

Dernière modification par Bybeu (Le 03/11/2016, à 00:10)

Hors ligne

#31 Le 06/11/2016, à 02:55

Bybeu

Re : Extraire le premier et le n ième mot d'une sortie de commande ?

Encore moi, j'ai pas terminé.
Je sèche sur comment faire tourner awk (fallait pas m'inviter, je suis devenu acro big_smile ) à partir de la fin de la sélection.
Comme j'ai rien trouvé là-dessus, j'ai tenté ceci, beau comme un one-liner qui môrch'pô:

# iLI="iptables -nvL INPUT --line-numbers"
# iDI="iptables -D INPUT "
# $iLI|sort -rn|awk '/br1/&&!/dpt/{printf("%s\n",$1)}'
20
19
9
# $iDI`$iLI|sort -rn|awk '/br1/&&!/dpt/{printf("%s",$1)}'`
# echo $?
1
# $iDI`$iLI|sort -rn|awk '/br1/&&!/dpt/{print($1)}'`
Bad argument `19'
Try `iptables -h' blabla

Sinon j'ai ça qui marche, mais si j'ai bien compris, y'a un grumeau dedans (grep)

# for N in $($iLI|grep br1|grep -v dpt|cut -d" " -f1|sort -nr); do $iDI $N; done

Une idée les compères ?
[EDIT] hé ben, je suis bête : iptables ne peut traiter qu'une ligne à la fois. Je le savais, mais j'avais pas vu que je m'imaginais à tort que mon truc était réitératif, ballot va...

Dernière modification par Bybeu (Le 06/11/2016, à 16:28)

Hors ligne