Les lignes ne sont pas respectés

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

Le problème exposé dans ce sujet a été résolu.

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 ?

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.

+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.

+0 -0

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

+0 -0

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).

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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