Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > fr.comp.os.unix > #7912 > unrolled thread

script sh / redirection de sorties

Started byThomas <fantome.forums.tDeContes@free.fr.invalid>
First post2022-03-16 22:52 +0100
Last post2022-03-19 23:44 +0100
Articles 8 — 3 participants

Back to article view | Back to fr.comp.os.unix


Contents

  script sh / redirection de sorties Thomas <fantome.forums.tDeContes@free.fr.invalid> - 2022-03-16 22:52 +0100
    Re: script sh / redirection de sorties Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2022-03-17 01:05 +0100
      Re: script sh / redirection de sorties Thomas <fantome.forums.tDeContes@free.fr.invalid> - 2022-03-17 02:27 +0100
        Re: script sh / redirection de sorties Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2022-03-17 15:16 +0100
          Re: script sh / redirection de sorties Nicolas George <nicolas$george@salle-s.org> - 2022-03-17 15:02 +0000
            Re: script sh / redirection de sorties Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2022-03-17 19:10 +0100
          Re: script sh / redirection de sorties Thomas <fantome.forums.tDeContes@free.fr.invalid> - 2022-03-19 16:28 +0100
            Re: script sh / redirection de sorties Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2022-03-19 23:44 +0100

#7912 — script sh / redirection de sorties

FromThomas <fantome.forums.tDeContes@free.fr.invalid>
Date2022-03-16 22:52 +0100
Subjectscript sh / redirection de sorties
Message-ID<fantome.forums.tDeContes-25D9C4.22524216032022@news.free.fr>
bonjour :-)



1)
déjà pour me repérer :

sur mon vieux mac :
+ sh --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)
Copyright (C) 2007 Free Software Foundation, Inc.

sur Ubuntu 16.4 :
$ sh --version
sh: 0: Illegal option --
$ man sh
NAME
     dash -- command interpreter (shell)

y a-t-il moyen de connaitre la version ?



2)
redirection de sorties :

je souhaite rediriger stdout et stderr dans le même fichier.

sur mon vieux mac, je faisais :
( commande ) &> "fichier.log" &
et ça marchais très bien.

sur Ubuntu 16.4, ça ne marche pas.

- pourquoi ?
- comment faire ?

-- 
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/

[toc] | [next] | [standalone]


#7916

FromAlain Ketterlin <alain@universite-de-strasbourg.fr.invalid>
Date2022-03-17 01:05 +0100
Message-ID<8735jhxx27.fsf@universite-de-strasbourg.fr.invalid>
In reply to#7912
Thomas <fantome.forums.tDeContes@free.fr.invalid> writes:

> 1)
> déjà pour me repérer :
>
> sur mon vieux mac :
> + sh --version
> GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)
> Copyright (C) 2007 Free Software Foundation, Inc.
>
> sur Ubuntu 16.4 :
> $ sh --version
> sh: 0: Illegal option --
> $ man sh
> NAME
>      dash -- command interpreter (shell)
>
> y a-t-il moyen de connaitre la version ?

dpkg -s dash (la ligne Version donne <version-upstream>-<version-ubuntu>)

> 2)
> redirection de sorties :
>
> je souhaite rediriger stdout et stderr dans le même fichier.
>
> sur mon vieux mac, je faisais :
> ( commande ) &> "fichier.log" &
> et ça marchais très bien.
>
> sur Ubuntu 16.4, ça ne marche pas.
>
> - pourquoi ?
> - comment faire ?

- c'est pas Posix
- on fait : ... 1> fichier.log 2>&1 ...

-- Alain.

[toc] | [prev] | [next] | [standalone]


#7917

FromThomas <fantome.forums.tDeContes@free.fr.invalid>
Date2022-03-17 02:27 +0100
Message-ID<fantome.forums.tDeContes-1C229B.02274317032022@news.free.fr>
In reply to#7916
In article <8735jhxx27.fsf@universite-de-strasbourg.fr.invalid>,
 Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> wrote:

> Thomas <fantome.forums.tDeContes@free.fr.invalid> writes:
> 
> > 1)
> > déjà pour me repérer :
> >
> > sur mon vieux mac :
> > + sh --version
> > GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)
> > Copyright (C) 2007 Free Software Foundation, Inc.
> >
> > sur Ubuntu 16.4 :
> > $ sh --version
> > sh: 0: Illegal option --
> > $ man sh
> > NAME
> >      dash -- command interpreter (shell)
> >
> > y a-t-il moyen de connaitre la version ?
> 
> dpkg -s dash (la ligne Version donne <version-upstream>-<version-ubuntu>)

merci :-)
(j'ai l'impression que tu n'en as pas besoin, dis moi si je me trompe.)

> 
> > 2)
> > redirection de sorties :
> >
> > je souhaite rediriger stdout et stderr dans le même fichier.
> >
> > sur mon vieux mac, je faisais :
> > ( commande ) &> "fichier.log" &
> > et ça marchais très bien.
> >
> > sur Ubuntu 16.4, ça ne marche pas.
> >
> > - pourquoi ?
> > - comment faire ?
> 
> - c'est pas Posix

ok

> - on fait : ... 1> fichier.log 2>&1 ...

c'est bête qu'on doive en mettre de chaque coté du nom du fichier,
y a-t-il un moyen plus compact, du genre : ... 2>&1 1> fichier.log ... ?

(intérêt : remplacement automatique avec moins de risque de se tromper 
ou d'en oublier, par ex)


merci bcp :-)

-- 
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/

[toc] | [prev] | [next] | [standalone]


#7924

FromAlain Ketterlin <alain@universite-de-strasbourg.fr.invalid>
Date2022-03-17 15:16 +0100
Message-ID<87y218wton.fsf@universite-de-strasbourg.fr.invalid>
In reply to#7917
Thomas <fantome.forums.tDeContes@free.fr.invalid> writes:

>> - on fait : ... 1> fichier.log 2>&1 ...

Je ne sais pas pourquoi j'ai écrit "1> fichier.log", le 1 n'est pas
nécessaire (mais inoffensif). Donc "commande > fichier.log 2>&1"

> c'est bête qu'on doive en mettre de chaque coté du nom du fichier,
> y a-t-il un moyen plus compact, du genre : ... 2>&1 1> fichier.log ... ?

L'ordre est important, les redirections sont faites de gauche à droite
(Il n'y a pas "deux cotés" du nom du fichier.) Dans ton exemple, l'effet
est :

1) 2>&1 : renvoie l'erreur (2) sur la même chose que la sortie (1, le
terminal, à ce stade)
2) 1> fichier.log (ou simplement "> fichier.log") : renvoie la sortie
sur le fichier

Donc l'erreur standard reste affectée au terminal (ou à ce à quoi était
affectée la sortie standard au moment où elle a été dupliquée).

> (intérêt : remplacement automatique avec moins de risque de se tromper 
> ou d'en oublier, par ex)

C'est plus compliqué que ça, c'est un langage général de manipulation
des descripteurs de fichiers. Par exemple :

commande 3>&1 1>&2 2>&3 3>&-

intervertit sortie et erreur standard. L'opérateur [n]>&[m] ferme [n]
(s'il est ouvert) et le remplace par une copie de [m]. Bref, c'est un
langage pour traduire les appels système de manipulation des descripteurs
de fichiers (open/close/dup).

-- Alain.

[toc] | [prev] | [next] | [standalone]


#7927

FromNicolas George <nicolas$george@salle-s.org>
Date2022-03-17 15:02 +0000
Message-ID<62334d6e$0$3441$426a74cc@news.free.fr>
In reply to#7924
Alain Ketterlin , dans le message
<87y218wton.fsf@universite-de-strasbourg.fr.invalid>, a écrit :
> L'ordre est important, les redirections sont faites de gauche à droite

Sauf |, qui s'écrit en dernier mais agit en premier.

[toc] | [prev] | [next] | [standalone]


#7930

FromAlain Ketterlin <alain@universite-de-strasbourg.fr.invalid>
Date2022-03-17 19:10 +0100
Message-ID<87tubwwitw.fsf@universite-de-strasbourg.fr.invalid>
In reply to#7927
Nicolas George <nicolas$george@salle-s.org> writes:

> Alain Ketterlin , dans le message
> <87y218wton.fsf@universite-de-strasbourg.fr.invalid>, a écrit :
>> L'ordre est important, les redirections sont faites de gauche à droite
>
> Sauf |, qui s'écrit en dernier mais agit en premier.

Hmm, techniquement un pipe n'effectue pas une redirection (le manuel
posix parle de "connexion" ou "affectation"). Mais effectivement, ce
"truc" est fait avant les redirections des différentes commandes du
pipeline, qui donc en annulent possiblement l'effet. Par exemple :

ls | cat < whatever.txt

redirige l'entrée standard de cat sur le fichier, après l'avoir
initialemment connecté/affectée au pipe (et ls prend donc un SIGPIPE,
puisqu'il n'y a plus rien à l'extrémité en lecture du pipe).

-- Alain.

[toc] | [prev] | [next] | [standalone]


#7933

FromThomas <fantome.forums.tDeContes@free.fr.invalid>
Date2022-03-19 16:28 +0100
Message-ID<fantome.forums.tDeContes-A0265E.16280219032022@news.free.fr>
In reply to#7924
In article <87y218wton.fsf@universite-de-strasbourg.fr.invalid>,
 Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> wrote:

> Thomas <fantome.forums.tDeContes@free.fr.invalid> writes:
> 
> >> - on fait : ... 1> fichier.log 2>&1 ...
> 
> Je ne sais pas pourquoi j'ai écrit "1> fichier.log", le 1 n'est pas
> nécessaire (mais inoffensif). Donc "commande > fichier.log 2>&1"

surement parce que c'est logique et plus lisible, puisque le 1 apparait 
dans le terme suivant.


> 
> > c'est bête qu'on doive en mettre de chaque coté du nom du fichier,
> > y a-t-il un moyen plus compact, du genre : ... 2>&1 1> fichier.log ... ?
> 
> L'ordre est important, les redirections sont faites de gauche à droite
> (Il n'y a pas "deux cotés" du nom du fichier.) Dans ton exemple, l'effet
> est :
> 
> 1) 2>&1 : renvoie l'erreur (2) sur la même chose que la sortie (1, le
> terminal, à ce stade)
> 2) 1> fichier.log (ou simplement "> fichier.log") : renvoie la sortie
> sur le fichier
> 
> Donc l'erreur standard reste affectée au terminal (ou à ce à quoi était
> affectée la sortie standard au moment où elle a été dupliquée).


ce que je comprend, c'est que ça n'est pas parfaitement intuitif, parce 
que :
le 1er chiffre désigne le descripteur de fichier lui-même, tandis que le 
2eme désigne sa destination.
cad que placé en 1ere ou en 2eme position, ils n'ont pas le même sens.

-- 
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/

[toc] | [prev] | [next] | [standalone]


#7936

FromAlain Ketterlin <alain@universite-de-strasbourg.fr.invalid>
Date2022-03-19 23:44 +0100
Message-ID<87pmmhwojp.fsf@universite-de-strasbourg.fr.invalid>
In reply to#7933
Thomas <fantome.forums.tDeContes@free.fr.invalid> writes:

>> > c'est bête qu'on doive en mettre de chaque coté du nom du fichier,
>> > y a-t-il un moyen plus compact, du genre : ... 2>&1 1> fichier.log ... ?

>> 1) 2>&1 : renvoie l'erreur (2) sur la même chose que la sortie (1, le
>> terminal, à ce stade)
>> 2) 1> fichier.log (ou simplement "> fichier.log") : renvoie la sortie
>> sur le fichier
>> 
>> Donc l'erreur standard reste affectée au terminal (ou à ce à quoi était
>> affectée la sortie standard au moment où elle a été dupliquée).
>
> ce que je comprend, c'est que ça n'est pas parfaitement intuitif, parce 
> que :
> le 1er chiffre désigne le descripteur de fichier lui-même, tandis que le 
> 2eme désigne sa destination.
> cad que placé en 1ere ou en 2eme position, ils n'ont pas le même sens.

Il y a quand même quelque chose entre les deux : > pour écriture, < pour
lecture, et & pour indiquer qu'on fait référence à un descripteur ("...
1>2" redirige la sortie standard sur un fichier nommé 2).

En fait ce sont des notations pour les appels système de gestion des
descripteurs (dans la suite [n] représente un entier optionnel, {n} un
entier obligatoire) :

[n]> nom : f=open(mot)+dup2(f,n)+close(f)
[n]>&{m} : dup2(m,n)
[n]>&- : close(n)

(etc. pour les variantes >> et aussi < et d'autres encore). Unix pur jus.

Quant à parler d'intuition à propos des descripteurs de fichiers, même
un dinosaure comme moi ne s'y risquerait pas.

-- Alain.

[toc] | [prev] | [standalone]


Back to top | Article view | fr.comp.os.unix


csiph-web