Bonjour,
est il possible, dans le script lui meme ,de retrouver le nom du fichier ou est redirigé la sortie ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part script.sh >toto.txt
ici toto.txt
Bonjour,
est il possible, dans le script lui meme ,de retrouver le nom du fichier ou est redirigé la sortie ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part script.sh >toto.txt
ici toto.txt
Peut-être que c'est possible en inspectant les process ou les file descriptors ouverts... mais je ne connais pas la commande magique...
Salut,
Bon, ce que je vais dire est un peu hors-sujet, mais peut-être que ca correspond plus à ton besoin:
Au début de ton script, tu peux mettre par exemple:
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 #!/bin/bash FICHIER=$1 exec > $FICHIER # la suite de ton code...
Du coup ca résoud le problème. Par contre, il faudra appeler ton script avec un argument (./script.sh toto.txt)
Désolé si je suis complètement à côté de la plaque. Sinon, je ne vois pas mieux que jack-ft...
Mon envie est d'envoyer un mail dans un script pour dire d'aller regarder des trucs dans la log que je cherche a preciser.
Mon probleme c'est que je n'ai pas la main sur l'appelant et que c'est en amont que la sortie est redirigée.
Et puis ca serait sympa d'avoir un truc générique pour savoir ou ca a ecrit ...
Si ,pour suivre l'idée de Jack ,quelqu'un a une idée pour trouver les fichiers associés aux descipteurs d'un process ...
Donc faute de mieux, je ferai ca à l'intérieur du script:
Edit: Qqs explications (j'ai posté un peu vite tout à l'heure):
Code : Sélectionner tout - Visualiser dans une fenêtre à part FICHIER=`readlink /proc/$$/fd/1`
$$ sera remplacé par le PID du script en cours, et on peut consulter ses File Descriptors dans /proc/no_pid/fd/ où on retrouve les standards (0, 1 et 2) qui sont des liens symboliques vers les devices correspondants ou vers les fichiers s'il y a une redirection.
Readlink permet d'afficher le fichier pointé par le lien.
Je savais bien qu'il y avait une commande magique pour ça!
Mais que rend-elle si la sortie est un pipe vers un autre process et non un fichier?
Code : Sélectionner tout - Visualiser dans une fenêtre à part script.sh | egrep -v '^$' > toto.txt
Bonjour,
On doit pouvoir aussi passer par lsof comme par exemple quelque chose comme ça (pas tester car pas d'unix ou linux sous la main):
Cordialement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part lsof -c script.sh -a -d 1
Cordialement.
Ah bonne question... je pensais que ca donnerait un lien vers le stdin de l'autre process mais non. Ca donne ca:
Le process du grep a le même pipe en fd0, par contre je ne sais pas comment les mettre en relation facilement (à part passer par lsof)...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ls -l /proc/30365/fd/ lrwx------ 1 apaul apaul 64 11 mars 08:40 0 -> /dev/pts/14 l-wx------ 1 apaul apaul 64 11 mars 08:39 1 -> pipe:[292224859] lrwx------ 1 apaul apaul 64 11 mars 08:40 2 -> /dev/pts/14
Voici une façon de faire avec lsof:
Celle ci fonctionne aussi pour les cas suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 TOTO=`echo $(lsof -c '^lsof' -g$$ -a -F n -d 1 | sed '/^n\//!d;s/^n//g')` echo $TOTO
Cordialement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 script.sh script.sh >res.txt script.sh | cat script.sh | cat >res.txt
Cordialement.
Merci, ca marche !
Juste une petite question de plus ( meme si on me dira que ce n'est pas l'endroit pour ... ) :
Y a t il l'equivalent sous unix ? ( celui que j'ai sous la main ne connait de readlink que la fonction C readlink )
Bonjour,
Tu peux peut-être t'inspirer d'une des idées que j'ai donné dans un autre post:
http://www.developpez.net/forums/d13...l/#post7176038
Mais comme je le précise, c'est loin d'être conventionnel.
Cordialement.
Cordialement.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager