Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[HS] Petite question bash sur les redirections

10 réponses
Avatar
guy.roussin
Bonsoir,

[Version rapide]
Comment s'appelle la console en cours d'utilisation (device)
lorsqu'on lance un script bash ?

[Version d=E9taill=E9e]
Je voudrais faire un script qui envoie une sortie
vers /dev/null ou vers la console en cours d'utilisation selon
un param=E8tre pass=E9 par l'utilisateur a un script.
donc, du genre :
une_de_mes_commandes | tee monfichier > /dev/null
ou
une_de_mes_commandes | tee monfichier > /dev/console_en_cours

Comme la chose se trouve un peu partout dans le code bash,
je pensais faire :
if [ VersDevNull -eq 1 ]; then
Sortie=3D"/dev/null"
else
Sortie=3D"/dev/console_en_cours"
fi

Puis dans le code :

ma_commande_num_1 | tee monfichier > $Sortie
...
ma_commande_num_2 | tee monfichier > $Sortie
...

Merci.


Guy

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

10 réponses

Avatar
Bruno Muller
--=-NIMwSLIXiVB9GUdk3V9q
Content-Type: text/plain; charset=ISO-8859-15
Content-Transfer-Encoding: quoted-printable

Hello,

Le vendredi 17 octobre 2008 à 16:32 +0200,
a écrit :
[Version détaillée]
Je voudrais faire un script qui envoie une sortie
vers /dev/null ou vers la console en cours d'utilisation selon
un paramètre passé par l'utilisateur a un script.
donc, du genre :
une_de_mes_commandes | tee monfichier > /dev/null
ou
une_de_mes_commandes | tee monfichier > /dev/console_en_cours

Comme la chose se trouve un peu partout dans le code bash,
je pensais faire :
if [ VersDevNull -eq 1 ]; then
Sortie="/dev/null"
else
Sortie="/dev/console_en_cours"
fi



Sortie_std="/proc/self/fd/1"
Sortie_err="/proc/self/fd/2"

Bruno

--
ZICMU
P : Le plus dangereux, c'est celui qui a la casquette...
M : T'es fou ! Le poilu, lui, il mord !
P : Ouais, mais l'autre il chante !
M : Aïe !

--=-NIMwSLIXiVB9GUdk3V9q
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: Ceci est une partie de message
=?ISO-8859-1?Q?numériquement?= =?ISO-8859-1?Q?_signée?
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iEYEABECAAYFAkj4pJkACgkQuJD2bkb8m5s+qwCeJFJX4ny3S6vBEbzrtmXZGljJ
kIwAoJFRyhlxnHhtNxPrmo21qIYPqdfl
=qbYk
-----END PGP SIGNATURE-----

--=-NIMwSLIXiVB9GUdk3V9q--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
guy.roussin
Fallait les connaître ceux-là ...
Merci beaucoup Bruno et bon week-end !

Guy

Sortie_std="/proc/self/fd/1"
Sortie_err="/proc/self/fd/2"



--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
François Cerbelle
Le Ven 17 octobre 2008 16:43, Bruno Muller a écrit :
[...]
Comme la chose se trouve un peu partout dans le code bash,
je pensais faire :
if [ VersDevNull -eq 1 ]; then
Sortie="/dev/null"
else
Sortie="/dev/console_en_cours"
fi





Sortie_std="/proc/self/fd/1"
Sortie_err="/proc/self/fd/2"



J'aurais bien tenté :
Sortie='> /dev/null'
else
Sortie=''

Qui doivent marcher aussi.



Fanfan
--
http://www.cerbelle.net - http://www.afdm-idf.org

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Daniel Caillibaud
a écrit :
Bonsoir,

[Version rapide]
Comment s'appelle la console en cours d'utilisation (device)
lorsqu'on lance un script bash ?

[Version détaillée]
Je voudrais faire un script qui envoie une sortie
vers /dev/null ou vers la console en cours d'utilisation selon
un paramètre passé par l'utilisateur a un script.
donc, du genre :
une_de_mes_commandes | tee monfichier > /dev/null
ou
une_de_mes_commandes | tee monfichier > /dev/console_en_cours

Comme la chose se trouve un peu partout dans le code bash,
je pensais faire :
if [ VersDevNull -eq 1 ]; then
Sortie="/dev/null"
else
Sortie="/dev/console_en_cours"



# plutôt :
Sortie="&1"

fi

Puis dans le code :

ma_commande_num_1 | tee monfichier > $Sortie
...
ma_commande_num_2 | tee monfichier > $Sortie



Ça devrait effectivement marcher.

Tu peux aussi envoyer les erreurs sur >&2

Cf http://abs.traduc.org/abs-5.3-fr/ch19.html (toujours penser à regarder ce "Guide avancé d'écriture des scripts Bash" dès que l'on se pose une
question bash, c'est une mine).

--
Daniel


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Daniel Caillibaud
François Cerbelle a écrit :
Sortie='> /dev/null'
else
Sortie=''

Qui doivent marcher aussi.



Oui, c'est encore plus simple (pas vu ce post avant d'envoyer le mien, que j'ai envoyé en + en pv...) à condition de ne plus mettre
"commande > $Sortie" mais simplement "commande $Sortie".

PS: pour les questions shell un peu HS ici, il y a la liste shellscript.

Là-bas comme alleurs (p'tet un peu +), pour avoir des réponses il vaut mieux réfléchir et chercher avant de demander, mais ils y a vraiment des cracks
qui répondent assez vite à des pbs parfois complexes, avec plein d'explications : <mailto:?subject=subscribe>

--
Daniel

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
mouss
a écrit :
Bonsoir,

[Version rapide]
Comment s'appelle la console en cours d'utilisation (device)
lorsqu'on lance un script bash ?

[Version détaillée]
Je voudrais faire un script qui envoie une sortie
vers /dev/null ou vers la console en cours d'utilisation selon
un paramètre passé par l'utilisateur a un script.
donc, du genre :
une_de_mes_commandes | tee monfichier > /dev/null
ou
une_de_mes_commandes | tee monfichier > /dev/console_en_cours

Comme la chose se trouve un peu partout dans le code bash,
je pensais faire :
if [ VersDevNull -eq 1 ]; then
Sortie="/dev/null"
else
Sortie="/dev/console_en_cours"
fi

Puis dans le code :

ma_commande_num_1 | tee monfichier > $Sortie
...
ma_commande_num_2 | tee monfichier > $Sortie
...




si ça se répéte, ça mérite une fonction:

lancer()
{
commande=$*
if [ ... ]; then
$command | tee monfichier > /dev/null
else
$command [ tee monfichier
fi
}

cela dit, je préfère en général procéder en deux étapes:

- le script "principal" écrit normalement. il n'y a donc pas trop de
"if" dedans.
- un autre script est utilisé pour lancer le script "principal" et qui
peut donc mettre /dev/null et autres joyeusetés.

ça permet de garder le script principal propre. (cela dit, on peut aussi
convertir le script principal en fonction et la mettre dans l'autre).



--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
guy.roussin
Daniel Caillibaud a écrit :
François Cerbelle a écrit :
Sortie='> /dev/null'
else
Sortie=''

Qui doivent marcher aussi.



Oui, c'est encore plus simple (pas vu ce post avant d'envoyer le mien,
que j'ai envoyé en + en pv...) à condition de ne plus mettre
"commande > $Sortie" mais simplement "commande $Sortie".



C'est ce que j'avais tenté sous bash directement dans une première
tentative, mais j'avais :

$ Sortie="> /dev/null"
$ ls $Sortie
ls: ne peut accéder >: Aucun fichier ou répertoire de ce type
/dev/null

PS: pour les questions shell un peu HS ici, il y a la liste shellscript .


Oui, désolé.

Guy


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
François Cerbelle
a écrit :
C'est ce que j'avais tenté sous bash directement dans une première
tentative, mais j'avais :
$ Sortie="> /dev/null"
$ ls $Sortie
ls: ne peut accéder >: Aucun fichier ou répertoire de ce type
/dev/null



J'avais mis des apostrophes, pensant que ça éviterait ce genre de
problème. Malheureusement, non. Ce n'était qu'une idée. J'ai pu tester
ce soir, elle ne fonctionne manifestement pas. Je n'insisterai pas, car
j'ai vu que tu as eu pas mal de réponses.
Fanfan

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
fra-duf-no-spam
Le 14169ième jour après Epoch,
François Cerbelle écrivait:

a écrit :
C'est ce que j'avais tenté sous bash directement dans une premià ¨re
tentative, mais j'avais :
$ Sortie="> /dev/null"
$ ls $Sortie
ls: ne peut accéder >: Aucun fichier ou répertoire de ce type
/dev/null



J'avais mis des apostrophes, pensant que ça éviterait ce genre de
problème. Malheureusement, non. Ce n'était qu'une idée. J' ai pu tester
ce soir, elle ne fonctionne manifestement pas. Je n'insisterai pas,
car j'ai vu que tu as eu pas mal de réponses.



la ligne:

ls "> /dev/null"

passe à ls les params entre "", donc pas de redirection possible. Le
shell ne fait qu'une seule évaluation de la chaine de caractères,
qu'il passe ensuite à ls. Et comme ">" doit être évalué par le shell,
pour rediriger stdout, il faut faire des choses du genre:

Sortie="> /dev/null"
eval "ls $Sortie"

pour avoir le résultat escompté.

--
Dieu a partagé: il a donné la nourriture aux riches et l'appà ©tit aux
pauvres.
-+- Coluche -+-

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
François Cerbelle
François TOURDE a écrit :
[...]
pour rediriger stdout, il faut faire des choses du genre:
Sortie="> /dev/null"
eval "ls $Sortie"
pour avoir le résultat escompté.



Merci pour cette xplication

--
François - Batiment B10 - 6, rue d'Andilly - 95600 Eaubonne
SFR : +33 6 03 01 55 12 - Freebox : +33 9 51 77 77 56
http://www.cerbelle.net - http://www.afdm-idf.org

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/DebFrFrenchLists
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact