Dans l'article <C151A960.871AA%,
Eric Levenez écrit:Les variables COLUMNS et LINES sont là, pour une compatibilité avec
de très vieux programmes. C'était un moyen de forcer une taille
quand la base termcap ou terminfo n'avait pas l'info ou pas la bonne
(c'était avant X10 et X11).
C'est aussi utile quand le programme n'est pas directement connecté
à un terminal, par exemple quand la sortie est envoyée dans un pipe,
même si le bout du pipe est connecté à un terminal (e.g., grep ou
filtre de colorisation).
Dans l'article <C151A960.871AA%news@levenez.com>,
Eric Levenez <news@levenez.com> écrit:
Les variables COLUMNS et LINES sont là, pour une compatibilité avec
de très vieux programmes. C'était un moyen de forcer une taille
quand la base termcap ou terminfo n'avait pas l'info ou pas la bonne
(c'était avant X10 et X11).
C'est aussi utile quand le programme n'est pas directement connecté
à un terminal, par exemple quand la sortie est envoyée dans un pipe,
même si le bout du pipe est connecté à un terminal (e.g., grep ou
filtre de colorisation).
Dans l'article <C151A960.871AA%,
Eric Levenez écrit:Les variables COLUMNS et LINES sont là, pour une compatibilité avec
de très vieux programmes. C'était un moyen de forcer une taille
quand la base termcap ou terminfo n'avait pas l'info ou pas la bonne
(c'était avant X10 et X11).
C'est aussi utile quand le programme n'est pas directement connecté
à un terminal, par exemple quand la sortie est envoyée dans un pipe,
même si le bout du pipe est connecté à un terminal (e.g., grep ou
filtre de colorisation).
Eric Levenez écrivait :
Ce mode de fonctionnement est une source inépuisable de problèmes. Le mieux
est encore de ne jamais utiliser LINES et COLUMNS et d'utiliser les ioctl
prévus pour. Ceci permet de ne pas tronquer les commandes redirigées.
Et si stdourt n'est pas un tty ? Pas d'IOCTL de taille sur un pipe ou
un fichier.
Eric Levenez <news@levenez.com> écrivait :
Ce mode de fonctionnement est une source inépuisable de problèmes. Le mieux
est encore de ne jamais utiliser LINES et COLUMNS et d'utiliser les ioctl
prévus pour. Ceci permet de ne pas tronquer les commandes redirigées.
Et si stdourt n'est pas un tty ? Pas d'IOCTL de taille sur un pipe ou
un fichier.
Eric Levenez écrivait :
Ce mode de fonctionnement est une source inépuisable de problèmes. Le mieux
est encore de ne jamais utiliser LINES et COLUMNS et d'utiliser les ioctl
prévus pour. Ceci permet de ne pas tronquer les commandes redirigées.
Et si stdourt n'est pas un tty ? Pas d'IOCTL de taille sur un pipe ou
un fichier.
Le 19/10/06 0:04, dans , « Erwan
David » a écrit :Et si stdourt n'est pas un tty ? Pas d'IOCTL de taille sur un pipe ou
un fichier.
Justement, c'est cela qui est bien : pas de troncature lors d'un traitement
informatique de stdout.
Le 19/10/06 0:04, dans <m2lknde0wu.fsf@ratagaz.depot.rail.eu.org>, « Erwan
David » <erwan@rail.eu.org> a écrit :
Et si stdourt n'est pas un tty ? Pas d'IOCTL de taille sur un pipe ou
un fichier.
Justement, c'est cela qui est bien : pas de troncature lors d'un traitement
informatique de stdout.
Le 19/10/06 0:04, dans , « Erwan
David » a écrit :Et si stdourt n'est pas un tty ? Pas d'IOCTL de taille sur un pipe ou
un fichier.
Justement, c'est cela qui est bien : pas de troncature lors d'un traitement
informatique de stdout.
Dans l'article <C15CD75D.896A4%,
Eric Levenez écrit:Le 19/10/06 0:04, dans , « Erwan
David » a écrit :Et si stdourt n'est pas un tty ? Pas d'IOCTL de taille sur un pipe ou
un fichier.
Justement, c'est cela qui est bien : pas de troncature lors d'un traitement
informatique de stdout.
Mais on peut vouloir tronquer les lignes (ou tout simplement "mettre en
page") pour que la sortie soit bien lisible dans la fenêtre du terminal.
Dans l'article <C15CD75D.896A4%news@levenez.com>,
Eric Levenez <news@levenez.com> écrit:
Le 19/10/06 0:04, dans <m2lknde0wu.fsf@ratagaz.depot.rail.eu.org>, « Erwan
David » <erwan@rail.eu.org> a écrit :
Et si stdourt n'est pas un tty ? Pas d'IOCTL de taille sur un pipe ou
un fichier.
Justement, c'est cela qui est bien : pas de troncature lors d'un traitement
informatique de stdout.
Mais on peut vouloir tronquer les lignes (ou tout simplement "mettre en
page") pour que la sortie soit bien lisible dans la fenêtre du terminal.
Dans l'article <C15CD75D.896A4%,
Eric Levenez écrit:Le 19/10/06 0:04, dans , « Erwan
David » a écrit :Et si stdourt n'est pas un tty ? Pas d'IOCTL de taille sur un pipe ou
un fichier.
Justement, c'est cela qui est bien : pas de troncature lors d'un traitement
informatique de stdout.
Mais on peut vouloir tronquer les lignes (ou tout simplement "mettre en
page") pour que la sortie soit bien lisible dans la fenêtre du terminal.
Le 19/10/06 18:32, dans <20061019162744$, « Vincent
Lefevre » <vincent+ a écrit :Dans l'article <C15CD75D.896A4%,
Eric Levenez écrit:Le 19/10/06 0:04, dans , « Erwan
David » a écrit :Et si stdourt n'est pas un tty ? Pas d'IOCTL de taille sur un pipe ou
un fichier.
Justement, c'est cela qui est bien : pas de troncature lors d'un traitement
informatique de stdout.
Mais on peut vouloir tronquer les lignes (ou tout simplement "mettre en
page") pour que la sortie soit bien lisible dans la fenêtre du terminal.
Et bien dans ce cas on ne fait pas de redirection ou pipe et on laisse
l'ioctl faire son boulot.
Si on redirige une sortie dans un fichier c'est pour la traiter plus tard,
et plus tard on aimera sûrement avoir une ligne complète et non tronquée. Si
on utilise un pipe c'est parce que l'on veut appliqué un traitement figé sur
un format de sortie connu et que l'on ne veut pas que le traitement change
en fonction de la longueur de la ligne à traiter.
Remarque on a le même problème avec LANG qui entraîne une
modification de la sortie des programmes et entraîne là aussi
beaucoup de bugs dans les traitements automatisés.
Le 19/10/06 18:32, dans <20061019162744$00e5@prunille.vinc17.org>, « Vincent
Lefevre » <vincent+news@vinc17.org> a écrit :
Dans l'article <C15CD75D.896A4%news@levenez.com>,
Eric Levenez <news@levenez.com> écrit:
Le 19/10/06 0:04, dans <m2lknde0wu.fsf@ratagaz.depot.rail.eu.org>, « Erwan
David » <erwan@rail.eu.org> a écrit :
Et si stdourt n'est pas un tty ? Pas d'IOCTL de taille sur un pipe ou
un fichier.
Justement, c'est cela qui est bien : pas de troncature lors d'un traitement
informatique de stdout.
Mais on peut vouloir tronquer les lignes (ou tout simplement "mettre en
page") pour que la sortie soit bien lisible dans la fenêtre du terminal.
Et bien dans ce cas on ne fait pas de redirection ou pipe et on laisse
l'ioctl faire son boulot.
Si on redirige une sortie dans un fichier c'est pour la traiter plus tard,
et plus tard on aimera sûrement avoir une ligne complète et non tronquée. Si
on utilise un pipe c'est parce que l'on veut appliqué un traitement figé sur
un format de sortie connu et que l'on ne veut pas que le traitement change
en fonction de la longueur de la ligne à traiter.
Remarque on a le même problème avec LANG qui entraîne une
modification de la sortie des programmes et entraîne là aussi
beaucoup de bugs dans les traitements automatisés.
Le 19/10/06 18:32, dans <20061019162744$, « Vincent
Lefevre » <vincent+ a écrit :Dans l'article <C15CD75D.896A4%,
Eric Levenez écrit:Le 19/10/06 0:04, dans , « Erwan
David » a écrit :Et si stdourt n'est pas un tty ? Pas d'IOCTL de taille sur un pipe ou
un fichier.
Justement, c'est cela qui est bien : pas de troncature lors d'un traitement
informatique de stdout.
Mais on peut vouloir tronquer les lignes (ou tout simplement "mettre en
page") pour que la sortie soit bien lisible dans la fenêtre du terminal.
Et bien dans ce cas on ne fait pas de redirection ou pipe et on laisse
l'ioctl faire son boulot.
Si on redirige une sortie dans un fichier c'est pour la traiter plus tard,
et plus tard on aimera sûrement avoir une ligne complète et non tronquée. Si
on utilise un pipe c'est parce que l'on veut appliqué un traitement figé sur
un format de sortie connu et que l'on ne veut pas que le traitement change
en fonction de la longueur de la ligne à traiter.
Remarque on a le même problème avec LANG qui entraîne une
modification de la sortie des programmes et entraîne là aussi
beaucoup de bugs dans les traitements automatisés.
On peut vouloir *à la fois* tronquer les lignes et filtrer la sortie
(e.g. pipe dans un grep ou dans une commande de colorisation).
Non, pas toujours. Pour des questions pratiques évidentes, on peut
très bien vouloir piper un résultat déjà mis en forme. Parfois c'est
même obligatoire: par exemple, la sortie d'une commande peut être un
format du style tableau et le nombre de caractères par ligne permet
de dire quelle largeur on veut avoir.
Maintenant, si tu acceptes de
réécrire un parseur d'un format de sortie fixé à chaque fois que tu
veux faire un grep, les options sont faites pour ça.
Note: tronquer une sortie colorisée n'est pas simple, car il faut
savoir interpréter les séquences d'échappement. Si on a besoin de
tronquer, mieux vaut donc le faire avant, si cela ne perturbe pas
la colorisation.
Il suffit juste de penser à faire un LANG=C LC_ALL=C en shell, ou
l'équivalent avec d'autres langages (et en langage C, la locale par
défaut est "C", donc pas de problème, sauf si on appelle system(),
dont le comportement peut dépendre des variables d'environnement,
ou si on est dans une bibliothèque). C'est le (faible) prix à payer
pour avoir une localisation.
D'ailleurs, il n'y a pas que les locales qui influent sur la sortie.
Il y a potentiellement toutes les variables d'environnement, en
particulier PATH, LD_LIBRARY_PATH, etc. C'est bien connu...
On peut vouloir *à la fois* tronquer les lignes et filtrer la sortie
(e.g. pipe dans un grep ou dans une commande de colorisation).
Non, pas toujours. Pour des questions pratiques évidentes, on peut
très bien vouloir piper un résultat déjà mis en forme. Parfois c'est
même obligatoire: par exemple, la sortie d'une commande peut être un
format du style tableau et le nombre de caractères par ligne permet
de dire quelle largeur on veut avoir.
Maintenant, si tu acceptes de
réécrire un parseur d'un format de sortie fixé à chaque fois que tu
veux faire un grep, les options sont faites pour ça.
Note: tronquer une sortie colorisée n'est pas simple, car il faut
savoir interpréter les séquences d'échappement. Si on a besoin de
tronquer, mieux vaut donc le faire avant, si cela ne perturbe pas
la colorisation.
Il suffit juste de penser à faire un LANG=C LC_ALL=C en shell, ou
l'équivalent avec d'autres langages (et en langage C, la locale par
défaut est "C", donc pas de problème, sauf si on appelle system(),
dont le comportement peut dépendre des variables d'environnement,
ou si on est dans une bibliothèque). C'est le (faible) prix à payer
pour avoir une localisation.
D'ailleurs, il n'y a pas que les locales qui influent sur la sortie.
Il y a potentiellement toutes les variables d'environnement, en
particulier PATH, LD_LIBRARY_PATH, etc. C'est bien connu...
On peut vouloir *à la fois* tronquer les lignes et filtrer la sortie
(e.g. pipe dans un grep ou dans une commande de colorisation).
Non, pas toujours. Pour des questions pratiques évidentes, on peut
très bien vouloir piper un résultat déjà mis en forme. Parfois c'est
même obligatoire: par exemple, la sortie d'une commande peut être un
format du style tableau et le nombre de caractères par ligne permet
de dire quelle largeur on veut avoir.
Maintenant, si tu acceptes de
réécrire un parseur d'un format de sortie fixé à chaque fois que tu
veux faire un grep, les options sont faites pour ça.
Note: tronquer une sortie colorisée n'est pas simple, car il faut
savoir interpréter les séquences d'échappement. Si on a besoin de
tronquer, mieux vaut donc le faire avant, si cela ne perturbe pas
la colorisation.
Il suffit juste de penser à faire un LANG=C LC_ALL=C en shell, ou
l'équivalent avec d'autres langages (et en langage C, la locale par
défaut est "C", donc pas de problème, sauf si on appelle system(),
dont le comportement peut dépendre des variables d'environnement,
ou si on est dans une bibliothèque). C'est le (faible) prix à payer
pour avoir une localisation.
D'ailleurs, il n'y a pas que les locales qui influent sur la sortie.
Il y a potentiellement toutes les variables d'environnement, en
particulier PATH, LD_LIBRARY_PATH, etc. C'est bien connu...
Le 19/10/06 22:53, dans <20061019203207$, « Vincent
Lefevre » <vincent+ a écrit :On peut vouloir *à la fois* tronquer les lignes et filtrer la sortie
(e.g. pipe dans un grep ou dans une commande de colorisation).
Il y a les commandes cut, sed, awk... Pour faire ce traitement.
Tu peux toujours trouver des cas où le comportement imposé par
l'utilisation de COLUMNS t'arrangera, mais ce n'est pas le cas dans
la majorité des cas.
Maintenant, si tu acceptes de réécrire un parseur d'un format de
sortie fixé à chaque fois que tu veux faire un grep, les options
sont faites pour ça.
C'est l'inverse justement, je ne veux pas changer le post-traitement
juste parce qu'une commande se comporte différemment en fonction
d'une variable shell.
Note: tronquer une sortie colorisée n'est pas simple, car il faut
savoir interpréter les séquences d'échappement. Si on a besoin de
tronquer, mieux vaut donc le faire avant, si cela ne perturbe pas
la colorisation.
Je ne vois pas l'intérêt de tronquer une version colorisée d'une
commande unix car cela veut dire que le traitement est spécifique à
un TERM et donc non utilisable sur un autre TERM.
Le 19/10/06 22:53, dans <20061019203207$6a00@prunille.vinc17.org>, « Vincent
Lefevre » <vincent+news@vinc17.org> a écrit :
On peut vouloir *à la fois* tronquer les lignes et filtrer la sortie
(e.g. pipe dans un grep ou dans une commande de colorisation).
Il y a les commandes cut, sed, awk... Pour faire ce traitement.
Tu peux toujours trouver des cas où le comportement imposé par
l'utilisation de COLUMNS t'arrangera, mais ce n'est pas le cas dans
la majorité des cas.
Maintenant, si tu acceptes de réécrire un parseur d'un format de
sortie fixé à chaque fois que tu veux faire un grep, les options
sont faites pour ça.
C'est l'inverse justement, je ne veux pas changer le post-traitement
juste parce qu'une commande se comporte différemment en fonction
d'une variable shell.
Note: tronquer une sortie colorisée n'est pas simple, car il faut
savoir interpréter les séquences d'échappement. Si on a besoin de
tronquer, mieux vaut donc le faire avant, si cela ne perturbe pas
la colorisation.
Je ne vois pas l'intérêt de tronquer une version colorisée d'une
commande unix car cela veut dire que le traitement est spécifique à
un TERM et donc non utilisable sur un autre TERM.
Le 19/10/06 22:53, dans <20061019203207$, « Vincent
Lefevre » <vincent+ a écrit :On peut vouloir *à la fois* tronquer les lignes et filtrer la sortie
(e.g. pipe dans un grep ou dans une commande de colorisation).
Il y a les commandes cut, sed, awk... Pour faire ce traitement.
Tu peux toujours trouver des cas où le comportement imposé par
l'utilisation de COLUMNS t'arrangera, mais ce n'est pas le cas dans
la majorité des cas.
Maintenant, si tu acceptes de réécrire un parseur d'un format de
sortie fixé à chaque fois que tu veux faire un grep, les options
sont faites pour ça.
C'est l'inverse justement, je ne veux pas changer le post-traitement
juste parce qu'une commande se comporte différemment en fonction
d'une variable shell.
Note: tronquer une sortie colorisée n'est pas simple, car il faut
savoir interpréter les séquences d'échappement. Si on a besoin de
tronquer, mieux vaut donc le faire avant, si cela ne perturbe pas
la colorisation.
Je ne vois pas l'intérêt de tronquer une version colorisée d'une
commande unix car cela veut dire que le traitement est spécifique à
un TERM et donc non utilisable sur un autre TERM.
Dans l'article <C15E2C0F.89BA5%,
Eric Levenez écrit:Le 19/10/06 22:53, dans <20061019203207$, « Vincent
Lefevre » <vincent+ a écrit :On peut vouloir *à la fois* tronquer les lignes et filtrer la sortie
(e.g. pipe dans un grep ou dans une commande de colorisation).
Il y a les commandes cut, sed, awk... Pour faire ce traitement.
C'est beaucoup plus long à taper qu'un "| grep blah", sans compter les
risques de bugs.
Donc en pratique, un tel traitement avec cut, sed, awk
est impensable.
Et tu peux utiliser les ioctl avec cut, sed, awk?
Tu peux toujours trouver des cas où le comportement imposé par
l'utilisation de COLUMNS t'arrangera, mais ce n'est pas le cas dans
la majorité des cas.
L'existence de tels cas justifie la présence de COLUMNS encore
aujourd'hui.
Maintenant, si tu acceptes de réécrire un parseur d'un format de
sortie fixé à chaque fois que tu veux faire un grep, les options
sont faites pour ça.
C'est l'inverse justement, je ne veux pas changer le post-traitement
juste parce qu'une commande se comporte différemment en fonction
d'une variable shell.
Tu n'as qu'à fixer toi-même les locales à POSIX.
Note: tronquer une sortie colorisée n'est pas simple, car il faut
savoir interpréter les séquences d'échappement. Si on a besoin de
tronquer, mieux vaut donc le faire avant, si cela ne perturbe pas
la colorisation.
Je ne vois pas l'intérêt de tronquer une version colorisée d'une
commande unix car cela veut dire que le traitement est spécifique à
un TERM et donc non utilisable sur un autre TERM.
Justement. C'est pour ça que la sortie doit être tronquée *avant* la
colorisation.
Par conséquent, les ioctl ne sont pas utilisables, et
la variable d'environnement COLUMNS doit être utilisée.
Dans l'article <C15E2C0F.89BA5%news@levenez.com>,
Eric Levenez <news@levenez.com> écrit:
Le 19/10/06 22:53, dans <20061019203207$6a00@prunille.vinc17.org>, « Vincent
Lefevre » <vincent+news@vinc17.org> a écrit :
On peut vouloir *à la fois* tronquer les lignes et filtrer la sortie
(e.g. pipe dans un grep ou dans une commande de colorisation).
Il y a les commandes cut, sed, awk... Pour faire ce traitement.
C'est beaucoup plus long à taper qu'un "| grep blah", sans compter les
risques de bugs.
Donc en pratique, un tel traitement avec cut, sed, awk
est impensable.
Et tu peux utiliser les ioctl avec cut, sed, awk?
Tu peux toujours trouver des cas où le comportement imposé par
l'utilisation de COLUMNS t'arrangera, mais ce n'est pas le cas dans
la majorité des cas.
L'existence de tels cas justifie la présence de COLUMNS encore
aujourd'hui.
Maintenant, si tu acceptes de réécrire un parseur d'un format de
sortie fixé à chaque fois que tu veux faire un grep, les options
sont faites pour ça.
C'est l'inverse justement, je ne veux pas changer le post-traitement
juste parce qu'une commande se comporte différemment en fonction
d'une variable shell.
Tu n'as qu'à fixer toi-même les locales à POSIX.
Note: tronquer une sortie colorisée n'est pas simple, car il faut
savoir interpréter les séquences d'échappement. Si on a besoin de
tronquer, mieux vaut donc le faire avant, si cela ne perturbe pas
la colorisation.
Je ne vois pas l'intérêt de tronquer une version colorisée d'une
commande unix car cela veut dire que le traitement est spécifique à
un TERM et donc non utilisable sur un autre TERM.
Justement. C'est pour ça que la sortie doit être tronquée *avant* la
colorisation.
Par conséquent, les ioctl ne sont pas utilisables, et
la variable d'environnement COLUMNS doit être utilisée.
Dans l'article <C15E2C0F.89BA5%,
Eric Levenez écrit:Le 19/10/06 22:53, dans <20061019203207$, « Vincent
Lefevre » <vincent+ a écrit :On peut vouloir *à la fois* tronquer les lignes et filtrer la sortie
(e.g. pipe dans un grep ou dans une commande de colorisation).
Il y a les commandes cut, sed, awk... Pour faire ce traitement.
C'est beaucoup plus long à taper qu'un "| grep blah", sans compter les
risques de bugs.
Donc en pratique, un tel traitement avec cut, sed, awk
est impensable.
Et tu peux utiliser les ioctl avec cut, sed, awk?
Tu peux toujours trouver des cas où le comportement imposé par
l'utilisation de COLUMNS t'arrangera, mais ce n'est pas le cas dans
la majorité des cas.
L'existence de tels cas justifie la présence de COLUMNS encore
aujourd'hui.
Maintenant, si tu acceptes de réécrire un parseur d'un format de
sortie fixé à chaque fois que tu veux faire un grep, les options
sont faites pour ça.
C'est l'inverse justement, je ne veux pas changer le post-traitement
juste parce qu'une commande se comporte différemment en fonction
d'une variable shell.
Tu n'as qu'à fixer toi-même les locales à POSIX.
Note: tronquer une sortie colorisée n'est pas simple, car il faut
savoir interpréter les séquences d'échappement. Si on a besoin de
tronquer, mieux vaut donc le faire avant, si cela ne perturbe pas
la colorisation.
Je ne vois pas l'intérêt de tronquer une version colorisée d'une
commande unix car cela veut dire que le traitement est spécifique à
un TERM et donc non utilisable sur un autre TERM.
Justement. C'est pour ça que la sortie doit être tronquée *avant* la
colorisation.
Par conséquent, les ioctl ne sont pas utilisables, et
la variable d'environnement COLUMNS doit être utilisée.
Le 21/10/06 23:57, dans <20061021214534$, « Vincent
Lefevre » <vincent+ a écrit :Dans l'article <C15E2C0F.89BA5%,
Eric Levenez écrit:Le 19/10/06 22:53, dans <20061019203207$, « Vincent
Lefevre » <vincent+ a écrit :On peut vouloir *à la fois* tronquer les lignes et filtrer la sortie
(e.g. pipe dans un grep ou dans une commande de colorisation).
Il y a les commandes cut, sed, awk... Pour faire ce traitement.
C'est beaucoup plus long à taper qu'un "| grep blah", sans compter les
risques de bugs.
Les bugs, c'est quand on présuppose une valeur de COLUMNS pour le
traitement. Sans cette limite la sortie de la première commande est
constante et le traitement n'a pas à être adapté selon la longueur.
Donc en pratique, un tel traitement avec cut, sed, awk
est impensable.
Non, c'est ce qu'il se fait tous les jours
Et tu peux utiliser les ioctl avec cut, sed, awk?
Non. Je n'ai jamais dit cela. Relis un peu mes explications.
Tu n'as qu'à fixer toi-même les locales à POSIX.
C'est ce que je fais, mais ce n'est pas ce que font 99 % des
programmeurs shell.
La colorisation n'a d'importance que pour 2 ou 3 commandes
et cela n'a pas d'utilité en redirection car c'est non portable par
définition.
Le 21/10/06 23:57, dans <20061021214534$51ea@prunille.vinc17.org>, « Vincent
Lefevre » <vincent+news@vinc17.org> a écrit :
Dans l'article <C15E2C0F.89BA5%news@levenez.com>,
Eric Levenez <news@levenez.com> écrit:
Le 19/10/06 22:53, dans <20061019203207$6a00@prunille.vinc17.org>, « Vincent
Lefevre » <vincent+news@vinc17.org> a écrit :
On peut vouloir *à la fois* tronquer les lignes et filtrer la sortie
(e.g. pipe dans un grep ou dans une commande de colorisation).
Il y a les commandes cut, sed, awk... Pour faire ce traitement.
C'est beaucoup plus long à taper qu'un "| grep blah", sans compter les
risques de bugs.
Les bugs, c'est quand on présuppose une valeur de COLUMNS pour le
traitement. Sans cette limite la sortie de la première commande est
constante et le traitement n'a pas à être adapté selon la longueur.
Donc en pratique, un tel traitement avec cut, sed, awk
est impensable.
Non, c'est ce qu'il se fait tous les jours
Et tu peux utiliser les ioctl avec cut, sed, awk?
Non. Je n'ai jamais dit cela. Relis un peu mes explications.
Tu n'as qu'à fixer toi-même les locales à POSIX.
C'est ce que je fais, mais ce n'est pas ce que font 99 % des
programmeurs shell.
La colorisation n'a d'importance que pour 2 ou 3 commandes
et cela n'a pas d'utilité en redirection car c'est non portable par
définition.
Le 21/10/06 23:57, dans <20061021214534$, « Vincent
Lefevre » <vincent+ a écrit :Dans l'article <C15E2C0F.89BA5%,
Eric Levenez écrit:Le 19/10/06 22:53, dans <20061019203207$, « Vincent
Lefevre » <vincent+ a écrit :On peut vouloir *à la fois* tronquer les lignes et filtrer la sortie
(e.g. pipe dans un grep ou dans une commande de colorisation).
Il y a les commandes cut, sed, awk... Pour faire ce traitement.
C'est beaucoup plus long à taper qu'un "| grep blah", sans compter les
risques de bugs.
Les bugs, c'est quand on présuppose une valeur de COLUMNS pour le
traitement. Sans cette limite la sortie de la première commande est
constante et le traitement n'a pas à être adapté selon la longueur.
Donc en pratique, un tel traitement avec cut, sed, awk
est impensable.
Non, c'est ce qu'il se fait tous les jours
Et tu peux utiliser les ioctl avec cut, sed, awk?
Non. Je n'ai jamais dit cela. Relis un peu mes explications.
Tu n'as qu'à fixer toi-même les locales à POSIX.
C'est ce que je fais, mais ce n'est pas ce que font 99 % des
programmeurs shell.
La colorisation n'a d'importance que pour 2 ou 3 commandes
et cela n'a pas d'utilité en redirection car c'est non portable par
définition.
En pratique, les programmes n'utilisent pas ces variables
d'environnement. L'émulateur de terminal (Terminal.app sous Mac OS X)
indique au noyau un changement de taille de fenêtre par un ioctl du
type TIOCSWINSZ. Le noyau va alors envoyer le signal SIGWINCH au groupe
de processus dépendant du pseudo tty, et ces programmes liront la
nouvelle taille en utilisant l'ioctl TIOCGWINSZ. Le shell lancé par
Terminal.app positionnera alors COLUMNS et LINES en conséquence.
Intéressant. On peut faire quelque chose d'équivalent avec DISPLAY?
DISPLAY est juste une variable shell utilisée pour trouver le serveur X
par défaut pour une application à son lancement.
Lorsque X11 est lancé, toutes les instances de Terminal.app seraient
averties de la valeur du nouveaux display.
Je ne vois pas le rapport entre une application X11 et Terminal.app qui
est un programme Mac OS X natif.
"netstat" quant à lui semble afficher sur 80 colonnes, quoi qu'il
arrive.
"netstat" n'a pas besoin de tronquer l'affichage alors il n'a pas besoin
d'utiliser COLUMNS ou SIGWINCH.
En pratique, les programmes n'utilisent pas ces variables
d'environnement. L'émulateur de terminal (Terminal.app sous Mac OS X)
indique au noyau un changement de taille de fenêtre par un ioctl du
type TIOCSWINSZ. Le noyau va alors envoyer le signal SIGWINCH au groupe
de processus dépendant du pseudo tty, et ces programmes liront la
nouvelle taille en utilisant l'ioctl TIOCGWINSZ. Le shell lancé par
Terminal.app positionnera alors COLUMNS et LINES en conséquence.
Intéressant. On peut faire quelque chose d'équivalent avec DISPLAY?
DISPLAY est juste une variable shell utilisée pour trouver le serveur X
par défaut pour une application à son lancement.
Lorsque X11 est lancé, toutes les instances de Terminal.app seraient
averties de la valeur du nouveaux display.
Je ne vois pas le rapport entre une application X11 et Terminal.app qui
est un programme Mac OS X natif.
"netstat" quant à lui semble afficher sur 80 colonnes, quoi qu'il
arrive.
"netstat" n'a pas besoin de tronquer l'affichage alors il n'a pas besoin
d'utiliser COLUMNS ou SIGWINCH.
En pratique, les programmes n'utilisent pas ces variables
d'environnement. L'émulateur de terminal (Terminal.app sous Mac OS X)
indique au noyau un changement de taille de fenêtre par un ioctl du
type TIOCSWINSZ. Le noyau va alors envoyer le signal SIGWINCH au groupe
de processus dépendant du pseudo tty, et ces programmes liront la
nouvelle taille en utilisant l'ioctl TIOCGWINSZ. Le shell lancé par
Terminal.app positionnera alors COLUMNS et LINES en conséquence.
Intéressant. On peut faire quelque chose d'équivalent avec DISPLAY?
DISPLAY est juste une variable shell utilisée pour trouver le serveur X
par défaut pour une application à son lancement.
Lorsque X11 est lancé, toutes les instances de Terminal.app seraient
averties de la valeur du nouveaux display.
Je ne vois pas le rapport entre une application X11 et Terminal.app qui
est un programme Mac OS X natif.
"netstat" quant à lui semble afficher sur 80 colonnes, quoi qu'il
arrive.
"netstat" n'a pas besoin de tronquer l'affichage alors il n'a pas besoin
d'utiliser COLUMNS ou SIGWINCH.