GNT sans publicité, site mobile, fonctionnalitées exclusives...

afficher au term une trentaine de lignes et mettre la dernière dans une variab le

Le
Une Bévue
je me connecte par ssh pour faire tourner un script qui sort une 30taine
de lignes.
je détecte par grep la dernière (la précédente contient "iMac's URL :")
pour la mettre dans une variable "URL" que j'envoie en local sur un
butineur.

pour l'instant, je fais ça :
#!/usr/bin/zsh
URL=(`/usr/bin/xclip -o`)
SRV=yt@iMac
RMT_HOME="/Users/yt"
RMT_RECETTE="${RMT_HOME}/bin/recette"

URL=(`/usr/bin/ssh ${SRV} "echo '${URL}' | pbcopy; ${RMT_RECETTE}" |
grep -A 1 "iMac's URL :" | tail -n 1 `)
/usr/bin/xdg-open ${URL}
exit 0

mais là, je ne vois plus du tout la 30taine de lignes, elles sont
mangées par | grep -A

je sais qu'ils existent des pipes nommés, mais ne sais pas les utiliser.

des exemples ?

mon but, donc est de sortir au term la trentaine de lignes tout en
plaçant la dernère dans une variable.
Lire les 10 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Une Bévue
Le #24199471
Le 26/01/2012 22:51, Une Bévue a écrit :


mon but, donc est de sortir au term la trentaine de lignes tout en
plaçant la dernère dans une variable.



j'ai une première solution, qui ne me convient pas :
STDOUT=`/usr/bin/ssh ${SRV} "${RMT_RECETTE_TEE}"`
echo "STDOUT :n${STDOUT}"
URL=(`echo ${STDOUT} | grep -A 1 "iMac's URL :" | tail -n 1 `)
echo "URL = ${URL}"

car la sortie de STDOUT vient d'un seul coup (j'ai mis des sleep 0.5
dans le script distant)

ce qu'il me faudrait, c'est lire au fur et à mesure la sortie de :
/usr/bin/ssh ${SRV} "${RMT_RECETTE_TEE}"

envoyer ça vers deux commandes simultanément, ie. echo et grep

donc sur deux fifos.
pehache
Le #24199461
Le 26/01/12 22:51, Une Bévue a écrit :
je me connecte par ssh pour faire tourner un script qui sort une 30taine
de lignes.
je détecte par grep la dernière (la précédente contient "iMac's URL :")
pour la mettre dans une variable "URL" que j'envoie en local sur un
butineur.

pour l'instant, je fais ça :
#!/usr/bin/zsh
URL=(`/usr/bin/xclip -o`)
SRV=
RMT_HOME="/Users/yt"
RMT_RECETTE="${RMT_HOME}/bin/recette"

URL=(`/usr/bin/ssh ${SRV} "echo '${URL}' | pbcopy; ${RMT_RECETTE}" |
grep -A 1 "iMac's URL :" | tail -n 1 `)
/usr/bin/xdg-open ${URL}
exit 0

mais là, je ne vois plus du tout la 30taine de lignes, elles sont
mangées par | grep -A

je sais qu'ils existent des pipes nommés, mais ne sais pas les utiliser.

des exemples ?

mon but, donc est de sortir au term la trentaine de lignes tout en
plaçant la dernère dans une variable.



En plaçant un "tee" avant le "grep", et en lui faisant écrire dans le
terminal courant ?

TTY=`tty`

URL=(`/usr/bin/ssh ${SRV} "echo '${URL}' | pbcopy; ${RMT_RECETTE}" | tee
$TTY | grep -A 1 "iMac's URL :" | tail -n 1 `)
Une Bévue
Le #24199681
Le 26/01/2012 23:39, pehache a écrit :
En plaçant un "tee" avant le "grep", et en lui faisant écrire dans le
terminal courant ?

TTY=`tty`

URL=(`/usr/bin/ssh ${SRV} "echo '${URL}' | pbcopy; ${RMT_RECETTE}" | tee
$TTY | grep -A 1 "iMac's URL :" | tail -n 1 `)



ouais, super, merci bien.

j'ai essayé avec un pipe nommé, ça ne marche pas tjs, il ne reçoit
(lecture) pas toutes les lignes tout le temps...
Alain Montfranc
Le #24201101
Après mûre réflexion, Une Bévue a écrit :
je me connecte par ssh pour faire tourner un script qui sort une 30taine de
lignes.
je détecte par grep la dernière (la précédente contient "iMac's URL :") pour
la mettre dans une variable "URL" que j'envoie en local sur un butineur.

pour l'instant, je fais ça :
#!/usr/bin/zsh
URL=(`/usr/bin/xclip -o`)
SRV=
RMT_HOME="/Users/yt"
RMT_RECETTE="${RMT_HOME}/bin/recette"

URL=(`/usr/bin/ssh ${SRV} "echo '${URL}' | pbcopy; ${RMT_RECETTE}" | grep -A
1 "iMac's URL :" | tail -n 1 `)
/usr/bin/xdg-open ${URL}
exit 0

mais là, je ne vois plus du tout la 30taine de lignes, elles sont mangées par |
grep -A

je sais qu'ils existent des pipes nommés, mais ne sais pas les utiliser.

des exemples ?

mon but, donc est de sortir au term la trentaine de lignes tout en plaçant la
dernère dans une variable.



Pourquoi pas :

script -c "/usr/bin/ssh .../..." /tmp/out$$
URL=`cat /tmp/out$$ | grep -A 1 "iMac's URL :" | tail -n 1
rm /tmp/out$$
Arnaud Gomes-do-Vale
Le #24201501
[ Attention, ce message contient du zsh pas testé. ]

Une Bévue
je me connecte par ssh pour faire tourner un script qui sort une
30taine de lignes.
je détecte par grep la dernière (la précédente contient "iMac's URL
:") pour la mettre dans une variable "URL" que j'envoie en local sur
un butineur.



C'est vraiment forcément la dernière ? Si c'est le cas :

ssh tacommande | while read l
do
# C'est bourrin mais ça donne le bon résultat au final.
URL="$l"
echo "$l"
done
tonbutineur "$URL"


Si ce n'est pas forcément la dernière :

nextline=0
ssh tacommande | while read l
do
# C'est moins bourrin mais c'est plus lent.
[[ $nextline -eq 1 ]] && { nextline=0 ; URL="$l" }
echo "$l" | fgrep -q 'iMac.s URL' && nextline=1
echo "$l"
done
tonbutineur "$URL"

--
Arnaud
http://blogs.glou.org/arnaud/
Publicité
Suivre les réponses
Poster une réponse
Anonyme