Les lignes ne sont pas respectés

et j'arrive pas à mettre ça en colonnes.

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

Pour mon motd de quand je me connecte en ssh, j'ai fait un motd.sh qui utilise des .sh que j'ai fais ; mais qui sont réutilisables ailleurs.

Je m'explique : j'ai un script pour me dire qui est en ligne, avec les IP et les dates de co (plus cool à lire qu'un who) ; j'ai un script pour me dire quand s'est connectés pour la dernière fois et avec quelle IP tous les users, etc…

J'aimerais regrouper ces scripts dans un seul.

J'ai donc fait :

1
2
3
4
5
6
#!/bin/sh

$last=`./last.sh | column -t`
$online=`./online.sh | column -t`
echo $last
echo $online

Ce qui est censé m'afficher : Colonnes + multilignes

Mais qui m'affiche Colonnes + multilignes

last et online sont des scripts sh qui font des echo simple.

Vous avez des idées ?

+0 -0

Remplace les 2 dernières lignes par :

1
2
echo -e "$last"
echo -e "$online"

L'option "-e" de echo active les "commandes" avec un "\" dedans comme par exemple "\n" qui est un saut de ligne. Il doit sûrement en avoir dans tes variables mais par défauts echo ne les prend pas en compte.

Édité par Kokopak

+0 -0

Normal tu dois mettre le "\$". Recopies exactement ce que j'ai mis et ça devrait marcher. Le "$" signifie que tu veut afficher une variable. Et je te conseillerais d'enlever les "\$" que tu as mis pour les 2 premières variables.

Édité par Kokopak

+0 -0
Auteur du sujet

Ok, c'est bizarre…

1
2
3
4
5
6
7
#!/bin/sh

last=`./last.sh`
online=`./online.sh`

echo -e $last
echo -e $online

me retourne la même chose qu'au début, mais avec "-e" devant.

1
2
3
4
5
6
#!/bin/sh

last=`./last.sh`
online=`./online.sh`
echo -e "$last"
echo -e "$online"

M'affiche ce que je veux, mais avec -e devant…

Par contre, :

1
2
3
4
5
6
#!/bin/sh

last=`./last.sh`
online=`./online.sh`
echo "$last"
echo "$online"

ça, ça fait exactement ce que je veux…

Bizarre, :O

Édité par Krostar

+0 -0
Staff

Il doit sûrement en avoir dans tes variables mais par défauts echo ne les prend pas en compte.

Dans la plupart des distro, le -e est activé par défaut.

I don't mind that you think slowly, but I do mind that you are publishing faster. – W. Pauli

+0 -0

Il doit sûrement en avoir dans tes variables mais par défauts echo ne les prend pas en compte.

Dans la plupart des distro, le -e est activé par défaut.

@dri1

Je parlais du "\n" :D . EDIT: j'ai rien dit…

Édité par Kokopak

+0 -0

Cette réponse a aidé l'auteur du sujet

En fait ce n'est pas spécifique à echo, mais au fait que le retour à la ligne est considéré dans ce cas comme un séparateur au même titre que l'espace ou la tabulation. Donc, dans le cas où tu ne mets pas de double-quotes, les lignes sont traitées comme des arguments différents.

Tu peux t'en rendre compte facilement avec cet exemple:

1
2
3
foo="a b"
printf $foo # N'affiche que «a» car est équivalent à «printf a b»
printf "$foo" # Affiche «a b» car «printf "a b"»

Edit: et pour le echo -e, c'est sûrement que le echo que tu utilises est une builtin qui ne respecte pas tout à fait les arguments (comme sous tcsh je crois), et non echo(1).

Édité par entwanne

Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte