Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/03/2008, à 15:54

libre

[Résolu] echo sur plusieurs lignes

Plusieurs lignes peuvent-elle être encoder dans un fichier avec une seule commande echo.

Exemple

#!/bin/bash
`echo "##---------------------" >> essai.txt`
`echo "##-----Essai-----------" >> essai.txt`
`echo "##---------------------" >> essai.txt`

Voila, j'ai 3 commandes echo pour afficher mes différentes lignes vers le fichier essai.txt
Içi j'ai 3 lignes, si maintenant j'en ai 30, n'y a t'il pas moyen de simplifier ?

J'ai essayé ça

#!/bin/bash
(`echo "##---------------------"`
`echo "##-----Essai-----------"`
`echo "##---------------------"`) >> essai.txt

mais cela ne fonctionne pas.

Dernière modification par libre (Le 13/03/2008, à 20:20)


La liberté signifie la responsabilité. C'est pourquoi la plupart des hommes la craignent.

Hors ligne

#2 Le 13/03/2008, à 16:20

robinmcgregord

Re : [Résolu] echo sur plusieurs lignes

http://forum.ubuntu-fr.org/viewtopic.php?pid=978586
neutral

Dernière modification par robinmcgregord (Le 13/03/2008, à 16:20)

Hors ligne

#3 Le 13/03/2008, à 16:24

Saito

Re : [Résolu] echo sur plusieurs lignes

Salut,

il est possible par exemple de passer par un here-document en utilisant cat par exemple:

cat >> essai.txt <<EOF
------------------
------ Essai ------
------------------
EOF

Pour plus d'infos, man bash, Paragraphe sur here documents (Document en ligne en fr)

ou alors, si tu veux garder echo:

{ echo ------------------
echo ------ Essai ------
echo ------------------
} >> essai.txt

PS: pourquoi utilises-tu des backquotes pour exécuter tes echos? c'est inutile.

Dernière modification par Saito (Le 13/03/2008, à 16:25)


Aku-Soku-Zan_Shinsengumi

Hors ligne

#4 Le 13/03/2008, à 16:31

Alain.g

Re : [Résolu] echo sur plusieurs lignes

Ou directement :

echo "##---------------------
##-----Essai-----------
##---------------------" >> essai.txt

Xubuntu Karmic !

Hors ligne

#5 Le 13/03/2008, à 16:41

libre

Re : [Résolu] echo sur plusieurs lignes

Un grand merci pour vos réponses, j'ai utilisé la commande cat (exemple de Saito).
C'est génialisime, justement ce que je voulais.

Mon but est de faire un script bash qui remplacerait le fichier sources.list par le miens et celà suivant un choix de version (gutsy, dapper, hardy)

pourquoi utilises-tu des backquotes pour exécuter tes echos? c'est inutile.

Je pensais que les backquotes était indispensable dans les scripts bash

dans un script bash, command utiliser ta commande cat en superutilisateur ?
Car pour mon projet, il faut que je sois en superutilisateur pour modifier sources.list


La liberté signifie la responsabilité. C'est pourquoi la plupart des hommes la craignent.

Hors ligne

#6 Le 13/03/2008, à 16:45

libre

Re : [Résolu] echo sur plusieurs lignes

J'ai essayé

sudo cat >> /etc/apt/sources.list <<EOF

Mais rien, pas de modification (je précise que je travaille avec une copie su sources.list)


La liberté signifie la responsabilité. C'est pourquoi la plupart des hommes la craignent.

Hors ligne

#7 Le 13/03/2008, à 16:55

Saito

Re : [Résolu] echo sur plusieurs lignes

Je pensais que les backquotes était indispensable dans les scripts bash

Non, elles permettent de récupérer la sortie d'une commande:

a=`lspci`

Ainsi $a contient la sortie de la commande lspci que l'on pourra ensuite traiter.
A noter que les backquotes sont remplacés avantageusement par $(), d'une part pour la lisibilité et aussi parceque cela simplifie l'écriture ( pas de caractères spéciaux contrairement aux `` )

dans un script bash, command utiliser ta commande cat en superutilisateur ?
Car pour mon projet, il faut que je sois en superutilisateur pour modifier sources.list

A mon avis, je pense qu'il serait mieux que tu fasses ton script sans toucher aux droits mais qu'ensuite tu lances le script lui-même en root.


Aku-Soku-Zan_Shinsengumi

Hors ligne

#8 Le 13/03/2008, à 17:09

libre

Re : [Résolu] echo sur plusieurs lignes

Ok Saito, j'ai pigé le principe des backquotes.

Pour la commande du superutilisateur j'ai essayé comme tu me la dit c'est à dire en lançant mon script comme cela sudo ./change_sources
Le terminal me demande mon code, ne me renvoye aucune erreur et mon fichier sources.list n'est pas créer.

Voiçi mon script

#!/bin/bash
source=/etc/apt/sources.list


cat >> $source <<EOF
##------------------------------------------------------------------------------------------
##                      Voiçi la liste de tous mes dépôts pour GUTSY
##
##
## ------------------------------------------------------------------------------------------
## Remplacer le fichier d'origine "/etc/apt/sources.list" par celui-çi
## Vous pouvez activer ou désactiver un dépôts en supprimant ou en ajoutant "#"

## restricted (maintenu par la société)
## universe par la communauté (que du libre)
## multiverse (pas libre)


## -------------------------------- Dépôts officiels (ubuntu) -------------------------------
deb http://fr.archive.ubuntu.com/ubuntu/ gutsy main restricted universe multiverse
deb http://fr.archive.ubuntu.com/ubuntu/ gutsy-security main restricted universe multiverse
deb http://fr.archive.ubuntu.com/ubuntu/ gutsy-updates main restricted universe multiverse


## -------------------------------------- Backports -----------------------------------------
#deb http://fr.archive.ubuntu.com/ubuntu/ gutsy-backports main restricted universe multiverse


## ------------------- Commercial ('canonical', logiciels libre et non libre) ---------------
#deb http://archive.canonical.com/ gutsy-commercial main


## ---------------- Medibuntu (codec propriétaire mp3,divX,Xvid,dvd cryptés) ----------------
deb http://packages.medibuntu.org/ gutsy free non-free
## Clé pour obtenir l'autorisation d'accès au dépot, à taper dans le terminal
## wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O- | sudo apt-key add -


## --------------------------- JBROUT (gestionnaire de photos) ------------------------------
deb http://jbrout.free.fr/download/debian binary/


## --------------------------- Qtpfsgui (faire des photos HDR) ------------------------------
deb http://ubuntu.davromaniak.eu gutsy-depomaniak all
#deb-src http://ubuntu.davromaniak.eu gutsy-depomaniak all
## Clé pour obtenir l'autorisation d'accès au dépot, à taper dans le terminal
## wget -q http://ubuntu.davromaniak.eu/1D59E694.gpg -O- | sudo apt-key add -


## ---------------------------------- Dépots sources ----------------------------------------
#deb-src http://fr.archive.ubuntu.com/ubuntu/ dapper main restricted universe multiverse
#deb-src http://fr.archive.ubuntu.com/ubuntu/ dapper-security main restricted universe multiverse
#deb-src http://fr.archive.ubuntu.com/ubuntu/ dapper-updates main restricted universe multiverse
#deb-src http://archive.canonical.com/ dapper-commercial main
#deb-src http://fr.archive.ubuntu.com/ubuntu/ dapper-backports main restricted universe multiverse
#deb-src http://packages.medibuntu.org/ dapper free non-free
EOF

Mais si je met $source=/home/fabrice/Bureau/sources.list alors ça fonctionne.
Quel est le problème ?


La liberté signifie la responsabilité. C'est pourquoi la plupart des hommes la craignent.

Hors ligne

#9 Le 13/03/2008, à 17:13

libre

Re : [Résolu] echo sur plusieurs lignes

J'ai aussi essayé sudo sh change_sources, même résultat: pas de message d'erreur et pas de fichier /etc/apt/sources.list créé.


La liberté signifie la responsabilité. C'est pourquoi la plupart des hommes la craignent.

Hors ligne

#10 Le 13/03/2008, à 17:25

Saito

Re : [Résolu] echo sur plusieurs lignes

cat >> $source <<EOF

Ici, le '>>' indique que tu ajoutes ton contenu à la fin de ton fichier, donc en gardant le contenu précédent. Ne veux-tu pas plutôt le tronquer (remplacer le contenu par ton texte)? Dans ce cas, utilise le chevron simple '>'.

Sinon, sudo ./change_sources devrait marcher. Vérifies que ton fichier ne contient pas plusieurs fois ton texte à la fin ( à cause de '>>'), ce qui signifierait qu'il marchait mais que tu ne t'en rendais pas compte.

Dernière modification par Saito (Le 13/03/2008, à 17:27)


Aku-Soku-Zan_Shinsengumi

Hors ligne

#11 Le 13/03/2008, à 17:32

®om

Re : [Résolu] echo sur plusieurs lignes

$ echo -e "aaa\nbbb"
aaa
bbb

Hors ligne

#12 Le 13/03/2008, à 17:48

libre

Re : [Résolu] echo sur plusieurs lignes

Ok Saito, maintenant ca fonctionne avec sudo ./change, je ne sais pas pourquoi maintenant et pas avant ????

Si maintenant je veux simplement double-cliquer sur l'image du script pour le lancer, comment le lancer en superutilisateur ?

j'ai également remplacé '>'.


Comme je suis bien lancé, je continue.


La liberté signifie la responsabilité. C'est pourquoi la plupart des hommes la craignent.

Hors ligne

#13 Le 13/03/2008, à 17:50

libre

Re : [Résolu] echo sur plusieurs lignes

Merci ®om, mais je me vois mal encoder tous le sources.list avec cette méthode. La méthode que je trouve la plus adapté pour mon cas est celle de Saito ou de Alain.g


La liberté signifie la responsabilité. C'est pourquoi la plupart des hommes la craignent.

Hors ligne

#14 Le 13/03/2008, à 18:10

libre

Re : [Résolu] echo sur plusieurs lignes

Ok j'ai trouvé sudo -c, c'est peut être pas la bonne solution mais c'est la seule que j'ai trouvé.

Voiçi ou j'en suis

#!/bin/bash
#source=/etc/apt/sources.list
source=/etc/apt/essai.txt  #pour le test


sudo bash -c "
cat > $source <<EOF
##------------------------------------------------------------------------------------------
##                      Voiçi la liste de tous mes dépôts pour GUTSY
##
##
## ------------------------------------------------------------------------------------------
## Remplacer le fichier d'origine /etc/apt/sources.list par celui-çi
## Vous pouvez activer ou désactiver un dépôts en supprimant ou en ajoutant #

## restricted (maintenu par la société)
## universe par la communauté (que du libre)
## multiverse (pas libre)


## -------------------------------- Dépôts officiels (ubuntu) -------------------------------
deb http://fr.archive.ubuntu.com/ubuntu/ gutsy main restricted universe multiverse
deb http://fr.archive.ubuntu.com/ubuntu/ gutsy-security main restricted universe multiverse
deb http://fr.archive.ubuntu.com/ubuntu/ gutsy-updates main restricted universe multiverse


## -------------------------------------- Backports -----------------------------------------
#deb http://fr.archive.ubuntu.com/ubuntu/ gutsy-backports main restricted universe multiverse


## ------------------- Commercial ('canonical', logiciels libre et non libre) ---------------
#deb http://archive.canonical.com/ gutsy-commercial main


## ---------------- Medibuntu (codec propriétaire mp3,divX,Xvid,dvd cryptés) ----------------
deb http://packages.medibuntu.org/ gutsy free non-free
## Clé pour obtenir l'autorisation d'accès au dépot, à taper dans le terminal
## wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O- | sudo apt-key add -


## --------------------------- JBROUT (gestionnaire de photos) ------------------------------
deb http://jbrout.free.fr/download/debian binary/


## --------------------------- Qtpfsgui (faire des photos HDR) ------------------------------
deb http://ubuntu.davromaniak.eu gutsy-depomaniak all
#deb-src http://ubuntu.davromaniak.eu gutsy-depomaniak all
## Clé pour obtenir l'autorisation d'accès au dépot, à taper dans le terminal
## wget -q http://ubuntu.davromaniak.eu/1D59E694.gpg -O- | sudo apt-key add -


## ---------------------------------- Dépots sources ----------------------------------------
#deb-src http://fr.archive.ubuntu.com/ubuntu/ dapper main restricted universe multiverse
#deb-src http://fr.archive.ubuntu.com/ubuntu/ dapper-security main restricted universe multiverse
#deb-src http://fr.archive.ubuntu.com/ubuntu/ dapper-updates main restricted universe multiverse
#deb-src http://archive.canonical.com/ dapper-commercial main
#deb-src http://fr.archive.ubuntu.com/ubuntu/ dapper-backports main restricted universe multiverse
#deb-src http://packages.medibuntu.org/ dapper free non-free
EOF"

La liberté signifie la responsabilité. C'est pourquoi la plupart des hommes la craignent.

Hors ligne

#15 Le 13/03/2008, à 18:23

Saito

Re : [Résolu] echo sur plusieurs lignes

Oui, «bash -c» est bien ce qu'il te faut avec sudo.
Si tu veux le lancer sans passer par un terminal, utilise gksudo sous gnome ou son équivalent sous kde au lieu de sudo pour qu'il te demande ton mot de passe graphiquement.


Aku-Soku-Zan_Shinsengumi

Hors ligne

#16 Le 13/03/2008, à 18:30

®om

Re : [Résolu] echo sur plusieurs lignes

test.sh:

echo "salut
ceci
est
un
test"
$ ./test.sh
salut
ceci
est
un
test

Dernière modification par ®om (Le 13/03/2008, à 18:30)

Hors ligne

#17 Le 13/03/2008, à 19:02

libre

Re : [Résolu] echo sur plusieurs lignes

Voici mon script, qui ce monte petit à petit.

#!/bin/bash
#source=/etc/apt/sources.list
source=/etc/apt/essai.txt  #pour le test


action=`zenity --list --title "Mise à jour de /etc/apt/sources.liste" --text="ATTENTION, ce script vas modifier un fichier\rindispensable au bon fonctionnement d'ubuntu.\rAnnuler cette procédure si vous avez un doute\r\rQuelle version d'Ubuntu avez-vous ?" --column "Version" "dapper" "feisty" "gusty" "hardy"`
if [ "$?" = 1 ];
then
	exit
fi

if [ $action ];
then
#Remplacement des paquets d'origines

sudo bash -c "
cat > $source <<EOF
##------------------------------------------------------------------------------------------
##                      Voiçi la liste de tous mes dépôts pour GUTSY
##
##
## ------------------------------------------------------------------------------------------
## Remplacer le fichier d'origine /etc/apt/sources.list par celui-çi
## Vous pouvez activer ou désactiver un dépôts en supprimant ou en ajoutant #

## restricted (maintenu par la société)
## universe par la communauté (que du libre)
## multiverse (pas libre)


## -------------------------------- Dépôts officiels (ubuntu) -------------------------------
deb http://fr.archive.ubuntu.com/ubuntu/ gutsy main restricted universe multiverse
deb http://fr.archive.ubuntu.com/ubuntu/ gutsy-security main restricted universe multiverse
deb http://fr.archive.ubuntu.com/ubuntu/ gutsy-updates main restricted universe multiverse


## -------------------------------------- Backports -----------------------------------------
#deb http://fr.archive.ubuntu.com/ubuntu/ gutsy-backports main restricted universe multiverse


## ------------------- Commercial ('canonical', logiciels libre et non libre) ---------------
#deb http://archive.canonical.com/ gutsy-commercial main


## ---------------- Medibuntu (codec propriétaire mp3,divX,Xvid,dvd cryptés) ----------------
deb http://packages.medibuntu.org/ gutsy free non-free
## Clé pour obtenir l'autorisation d'accès au dépot, à taper dans le terminal
## wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O- | sudo apt-key add -


## --------------------------- JBROUT (gestionnaire de photos) ------------------------------
deb http://jbrout.free.fr/download/debian binary/


## --------------------------- Qtpfsgui (faire des photos HDR) ------------------------------
deb http://ubuntu.davromaniak.eu gutsy-depomaniak all
#deb-src http://ubuntu.davromaniak.eu gutsy-depomaniak all
## Clé pour obtenir l'autorisation d'accès au dépot, à taper dans le terminal
## wget -q http://ubuntu.davromaniak.eu/1D59E694.gpg -O- | sudo apt-key add -


## ---------------------------------- Dépots sources ----------------------------------------
#deb-src http://fr.archive.ubuntu.com/ubuntu/ dapper main restricted universe multiverse
#deb-src http://fr.archive.ubuntu.com/ubuntu/ dapper-security main restricted universe multiverse
#deb-src http://fr.archive.ubuntu.com/ubuntu/ dapper-updates main restricted universe multiverse
#deb-src http://archive.canonical.com/ dapper-commercial main
#deb-src http://fr.archive.ubuntu.com/ubuntu/ dapper-backports main restricted universe multiverse
#deb-src http://packages.medibuntu.org/ dapper free non-free
EOF"

#Actualisations des clés
#wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O- | sudo apt-key add -
#wget -q http://ubuntu.davromaniak.eu/1D59E694.gpg -O- | sudo apt-key add -

sudo apt-get update
fi

Saito: J'ai remplacé sudo bash -c par gksudo bash -c et le terminal  me dit qu'il y a trop d'arguments. Je cherche mais apparemment l'argument -c n'existe pas pour gksudo


La liberté signifie la responsabilité. C'est pourquoi la plupart des hommes la craignent.

Hors ligne

#18 Le 13/03/2008, à 19:09

Saito

Re : [Résolu] echo sur plusieurs lignes

gksudo -- bash -c ...

«--» pour marquer la fin des options de gksudo. Car gksudo prend directement la commande à lancer en argument, tout comme sudo, mais prends le -c pour lui, le traitement des options des deux programmes étant apparemment diffèrent.

Dernière modification par Saito (Le 13/03/2008, à 19:10)


Aku-Soku-Zan_Shinsengumi

Hors ligne

#19 Le 13/03/2008, à 19:40

libre

Re : [Résolu] echo sur plusieurs lignes

gksudo -- bash -c ... Cette commande m'affiche bien une fenêtre en me demandant mon code mais il m'affiche également dans la partie texte

L'application "bash '-c'"
mais également tous le script à partir de
cat > $source <<EOF
##------------------------------------------------------------------------------------------
##                      Voiçi la liste de tous mes dépôts pour GUTSY
##
##
## ------------------------------------------------------------------------------------------
## Remplacer le fichier d'origine /etc/apt/sources.list par celui-çi
## Vous pouvez activer ou désactiver un dépôts en supprimant ou en ajoutant #

## restricted (maintenu par la société)
## universe par la communauté (que du libre)
## multiverse (pas libre)


## -------------------------------- Dépôts officiels (ubuntu) -------------------------------
deb http://fr.archive.ubuntu.com/ubuntu/ gutsy main restricted universe multiverse
deb http://fr.archive.ubuntu.com/ubuntu/ gutsy-security main restricted universe multiverse
deb http://fr.archive.ubuntu.com/ubuntu/ gutsy-updates main restricted universe multiverse


## -------------------------------------- Backports -----------------------------------------
#deb http://fr.archive.ubuntu.com/ubuntu/ gutsy-backports main restricted universe multiverse


## ------------------- Commercial ('canonical', logiciels libre et non libre) ---------------
#deb http://archive.canonical.com/ gutsy-commercial main


## ---------------- Medibuntu (codec propriétaire mp3,divX,Xvid,dvd cryptés) ----------------
deb http://packages.medibuntu.org/ gutsy free non-free
## Clé pour obtenir l'autorisation d'accès au dépot, à taper dans le terminal
## wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O- | sudo apt-key add -


## --------------------------- JBROUT (gestionnaire de photos) ------------------------------
deb http://jbrout.free.fr/download/debian binary/


## --------------------------- Qtpfsgui (faire des photos HDR) ------------------------------
deb http://ubuntu.davromaniak.eu gutsy-depomaniak all
#deb-src http://ubuntu.davromaniak.eu gutsy-depomaniak all
## Clé pour obtenir l'autorisation d'accès au dépot, à taper dans le terminal
## wget -q http://ubuntu.davromaniak.eu/1D59E694.gpg -O- | sudo apt-key add -


## ---------------------------------- Dépots sources ----------------------------------------
#deb-src http://fr.archive.ubuntu.com/ubuntu/ dapper main restricted universe multiverse
#deb-src http://fr.archive.ubuntu.com/ubuntu/ dapper-security main restricted universe multiverse
#deb-src http://fr.archive.ubuntu.com/ubuntu/ dapper-updates main restricted universe multiverse
#deb-src http://archive.canonical.com/ dapper-commercial main
#deb-src http://fr.archive.ubuntu.com/ubuntu/ dapper-backports main restricted universe multiverse
#deb-src http://packages.medibuntu.org/ dapper free non-free
EOF"

Je en sais pas si je me fait bien comprendre, j'ai du mal à ma relire. Bon je recommence.
Pour simplifier: La fenêtre gksudo s'ouvre bien mais son texte d'origine à été remplacé par une partie de mon script (dans ses conditions, la hauteur de la fenêtre dépasse la hauteur de mon écran)


La liberté signifie la responsabilité. C'est pourquoi la plupart des hommes la craignent.

Hors ligne

#20 Le 13/03/2008, à 19:59

Saito

Re : [Résolu] echo sur plusieurs lignes

Ah oui, j'avais oublié ça smile
Par défaut, gksudo affiche comme message la commande à lancer, tu peux modifier ça avec l'option -m (cf. man gksudo).

(Il faudrait peut-être changer le nom du topic, ou en recréé un parcequ'on s'éloigne du sujet originel qui était d'afficher plusieurs lignes tongue)


Aku-Soku-Zan_Shinsengumi

Hors ligne

#21 Le 13/03/2008, à 20:19

libre

Re : [Résolu] echo sur plusieurs lignes

Effectivement, je me suis un petit peu laissé emporter par mon élan.
J'en ouvre un nouveau et je passe celui-là en résolu.
Je vous remercie pour vos conseils.

Chapeau Saito, tu es un pointure  en linux.


La liberté signifie la responsabilité. C'est pourquoi la plupart des hommes la craignent.

Hors ligne