Pour moi ça ça marche ouf... Pas de soucis !... Néanmoins ce petit
programme n'a pas été facile à mettre au point, dans les sources
que j'indique ci-dessous, vous voyez que j'ai tenté d'utiliser
les commandes cut,awk,head ( tail aussi par la même occasion )
mais aucune de ces commandes n'a fonctionné correctement dans ce
contexte.
Les commandes cut et head se brouillent avec les caractères accentués
et la commande awk qui ne s'en brouille pas si on l'exécute de manière
isolée, se mélange les pinceaux dans une boucle et prend $k comme
kème paramètre d'entrée du bash au lieu de le prendre comme indice
de boucle. La séquence qui n'est pas commentée est la seule qui
fonctionne, mais elle ne me satisfait pas car au fond, je ne la comprends pas!
Merci par avance si vous avez le temps de donner vos commentaires sur
la raison du pourquoi et du comment ces séquences de code ne fonctionnent
pas comme je m'y attendais.
Petit exercice assez rigolo, du coup j'ai voulu faire ma version. Attention j'utilise le shell /bin/sh de ma Debian Wheezy qui n'est pas /bin/bash (mais le script marchera tout autant sur bash normalement). Le voici :
------------------------------------- #!/bin/sh
word="$1" line=''
for letter in $(echo "$word" | sed -r 's/(.)/1 /g') do line="${line}${letter}" echo "$line" done -------------------------------------
~$ /tmp/test.sh éléphant é él élé élép éléph élépha éléphan éléphant
L'idée c'est juste « d'éclater » le mot passé en argument en une suite de lettres séparées par des espaces ce que fait le sed ci-dessus (où chaque lettre est remplacée par "elle-même + un espace".
Voilà, désolé, je ne réponds pas vraiment à ta question à propos de ton code à toi mais j'ai l'impression que tu utilises pas mal de syntaxes propres à bash et que ne sont pas compatibles avec la norme POSIX. Certains appellent cela des « basheries » et perso j'essaye de les éviter le plus possible, d'autant plus qu'on peut en général s'en passer sans problème.
Une autre remarque, c'est que, dans ton script, tu écris dans un fichier. Pour faire ce que tu souhaites, ça me semble inutiles. Et si dans un script on peut éviter une écriture sur le disque, il ne faut pas se gêner.
Voilà.
-- François Lafont
Salut,
On 26/06/2015 12:05, dyrmak wrote:
Je voulais écrire un petit programme bash pour
triangulariser du texte:
Petit exercice assez rigolo, du coup j'ai voulu faire ma version.
Attention j'utilise le shell /bin/sh de ma Debian Wheezy qui n'est
pas /bin/bash (mais le script marchera tout autant sur bash
normalement). Le voici :
-------------------------------------
#!/bin/sh
word="$1"
line=''
for letter in $(echo "$word" | sed -r 's/(.)/1 /g')
do
line="${line}${letter}"
echo "$line"
done
-------------------------------------
~$ /tmp/test.sh éléphant
é
él
élé
élép
éléph
élépha
éléphan
éléphant
L'idée c'est juste « d'éclater » le mot passé en argument en une
suite de lettres séparées par des espaces ce que fait le sed
ci-dessus (où chaque lettre est remplacée par "elle-même + un espace".
Voilà, désolé, je ne réponds pas vraiment à ta question à propos
de ton code à toi mais j'ai l'impression que tu utilises pas mal
de syntaxes propres à bash et que ne sont pas compatibles avec
la norme POSIX. Certains appellent cela des « basheries » et perso
j'essaye de les éviter le plus possible, d'autant plus qu'on peut
en général s'en passer sans problème.
Une autre remarque, c'est que, dans ton script, tu écris dans un
fichier. Pour faire ce que tu souhaites, ça me semble inutiles.
Et si dans un script on peut éviter une écriture sur le disque,
il ne faut pas se gêner.
Petit exercice assez rigolo, du coup j'ai voulu faire ma version. Attention j'utilise le shell /bin/sh de ma Debian Wheezy qui n'est pas /bin/bash (mais le script marchera tout autant sur bash normalement). Le voici :
------------------------------------- #!/bin/sh
word="$1" line=''
for letter in $(echo "$word" | sed -r 's/(.)/1 /g') do line="${line}${letter}" echo "$line" done -------------------------------------
~$ /tmp/test.sh éléphant é él élé élép éléph élépha éléphan éléphant
L'idée c'est juste « d'éclater » le mot passé en argument en une suite de lettres séparées par des espaces ce que fait le sed ci-dessus (où chaque lettre est remplacée par "elle-même + un espace".
Voilà, désolé, je ne réponds pas vraiment à ta question à propos de ton code à toi mais j'ai l'impression que tu utilises pas mal de syntaxes propres à bash et que ne sont pas compatibles avec la norme POSIX. Certains appellent cela des « basheries » et perso j'essaye de les éviter le plus possible, d'autant plus qu'on peut en général s'en passer sans problème.
Une autre remarque, c'est que, dans ton script, tu écris dans un fichier. Pour faire ce que tu souhaites, ça me semble inutiles. Et si dans un script on peut éviter une écriture sur le disque, il ne faut pas se gêner.
Voilà.
-- François Lafont
dyrmak
En 72 lignes Francois Lafont a écrit dans news:558d5600$0$3392$ le vendredi, 26 juin 2015 à 15:39:12 :
Salut,
On 26/06/2015 12:05, dyrmak wrote:
Je voulais écrire un petit programme bash pour triangulariser du texte:
Petit exercice assez rigolo, du coup j'ai voulu faire ma version. Attention j'utilise le shell /bin/sh de ma Debian Wheezy qui n'est pas /bin/bash (mais le script marchera tout autant sur bash normalement). Le voici :
------------------------------------- #!/bin/sh
word="$1" line=''
for letter in $(echo "$word" | sed -r 's/(.)/1 /g') do line="${line}${letter}" echo "$line" done -------------------------------------
~$ /tmp/test.sh éléphant é él élé élép éléph élépha éléphan éléphant
L'idée c'est juste « d'éclater » le mot passé en argument en une suite de lettres séparées par des espaces ce que fait le sed ci-dessus (où chaque lettre est remplacée par "elle-même + un espace".
Voilà, désolé, je ne réponds pas vraiment à ta question à propos de ton code à toi mais j'ai l'impression que tu utilises pas mal de syntaxes propres à bash et que ne sont pas compatibles avec la norme POSIX. Certains appellent cela des « basheries » et perso j'essaye de les éviter le plus possible, d'autant plus qu'on peut en général s'en passer sans problème.
Une autre remarque, c'est que, dans ton script, tu écris dans un fichier. Pour faire ce que tu souhaites, ça me semble inutiles. Et si dans un script on peut éviter une écriture sur le disque, il ne faut pas se gêner.
Voilà.
Excellent ! Depuis plusieurs jours j'étais bloqué par ce script et pour cause, je n'arrivais pas à le faire fonctionner, si j'avais donné ma langue au chat, j'aurais eu alors une solution toute faite et tout comme il faut pour ce que j'avais à faire, merci ! En fait cette version que j'ai proposée est ma version de test, c'était le chaînon qui manquait à un programme plus important, un compilateur de vhooks qui génère du texte animé à la volée et ce programme va aussi compiler au besoin des commandes pour les versions récentes de ffmpeg.
dyrmak -- ¿ De quién fue la culpa ? No sé de la suerte ++++ --- ++++ Linux operating system ++++ --- ++++
En 72 lignes Francois Lafont a écrit
dans news:558d5600$0$3392$426a34cc@news.free.fr
le vendredi, 26 juin 2015 à 15:39:12 :
Salut,
On 26/06/2015 12:05, dyrmak wrote:
Je voulais écrire un petit programme bash pour
triangulariser du texte:
Petit exercice assez rigolo, du coup j'ai voulu faire ma version.
Attention j'utilise le shell /bin/sh de ma Debian Wheezy qui n'est
pas /bin/bash (mais le script marchera tout autant sur bash
normalement). Le voici :
-------------------------------------
#!/bin/sh
word="$1"
line=''
for letter in $(echo "$word" | sed -r 's/(.)/1 /g')
do
line="${line}${letter}"
echo "$line"
done
-------------------------------------
~$ /tmp/test.sh éléphant
é
él
élé
élép
éléph
élépha
éléphan
éléphant
L'idée c'est juste « d'éclater » le mot passé en argument en une
suite de lettres séparées par des espaces ce que fait le sed
ci-dessus (où chaque lettre est remplacée par "elle-même + un espace".
Voilà, désolé, je ne réponds pas vraiment à ta question à propos
de ton code à toi mais j'ai l'impression que tu utilises pas mal
de syntaxes propres à bash et que ne sont pas compatibles avec
la norme POSIX. Certains appellent cela des « basheries » et perso
j'essaye de les éviter le plus possible, d'autant plus qu'on peut
en général s'en passer sans problème.
Une autre remarque, c'est que, dans ton script, tu écris dans un
fichier. Pour faire ce que tu souhaites, ça me semble inutiles.
Et si dans un script on peut éviter une écriture sur le disque,
il ne faut pas se gêner.
Voilà.
Excellent ! Depuis plusieurs jours j'étais bloqué par ce script et pour
cause, je n'arrivais pas à le faire fonctionner, si j'avais donné
ma langue au chat, j'aurais eu alors une solution toute faite et tout
comme il faut pour ce que j'avais à faire, merci !
En fait cette version que j'ai proposée est ma version de test,
c'était le chaînon qui manquait à un programme plus important,
un compilateur de vhooks qui génère du texte animé à la volée et
ce programme va aussi compiler au besoin des commandes pour
les versions récentes de ffmpeg.
dyrmak
--
¿ De quién fue la culpa ? No sé de la suerte
++++ --- ++++
Linux operating system
++++ --- ++++
Petit exercice assez rigolo, du coup j'ai voulu faire ma version. Attention j'utilise le shell /bin/sh de ma Debian Wheezy qui n'est pas /bin/bash (mais le script marchera tout autant sur bash normalement). Le voici :
------------------------------------- #!/bin/sh
word="$1" line=''
for letter in $(echo "$word" | sed -r 's/(.)/1 /g') do line="${line}${letter}" echo "$line" done -------------------------------------
~$ /tmp/test.sh éléphant é él élé élép éléph élépha éléphan éléphant
L'idée c'est juste « d'éclater » le mot passé en argument en une suite de lettres séparées par des espaces ce que fait le sed ci-dessus (où chaque lettre est remplacée par "elle-même + un espace".
Voilà, désolé, je ne réponds pas vraiment à ta question à propos de ton code à toi mais j'ai l'impression que tu utilises pas mal de syntaxes propres à bash et que ne sont pas compatibles avec la norme POSIX. Certains appellent cela des « basheries » et perso j'essaye de les éviter le plus possible, d'autant plus qu'on peut en général s'en passer sans problème.
Une autre remarque, c'est que, dans ton script, tu écris dans un fichier. Pour faire ce que tu souhaites, ça me semble inutiles. Et si dans un script on peut éviter une écriture sur le disque, il ne faut pas se gêner.
Voilà.
Excellent ! Depuis plusieurs jours j'étais bloqué par ce script et pour cause, je n'arrivais pas à le faire fonctionner, si j'avais donné ma langue au chat, j'aurais eu alors une solution toute faite et tout comme il faut pour ce que j'avais à faire, merci ! En fait cette version que j'ai proposée est ma version de test, c'était le chaînon qui manquait à un programme plus important, un compilateur de vhooks qui génère du texte animé à la volée et ce programme va aussi compiler au besoin des commandes pour les versions récentes de ffmpeg.
dyrmak -- ¿ De quién fue la culpa ? No sé de la suerte ++++ --- ++++ Linux operating system ++++ --- ++++