Pages : 1
#1 Le 13/03/2008, à 14: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, à 19:20)
La liberté signifie la responsabilité. C'est pourquoi la plupart des hommes la craignent.
Hors ligne
#2 Le 13/03/2008, à 15:20
- robinmcgregord
Re : [Résolu] echo sur plusieurs lignes
http://forum.ubuntu-fr.org/viewtopic.php?pid=978586
Dernière modification par robinmcgregord (Le 13/03/2008, à 15:20)
Hors ligne
#3 Le 13/03/2008, à 15: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, à 15:25)
Aku-Soku-Zan_Shinsengumi
Hors ligne
#4 Le 13/03/2008, à 15: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, à 15: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, à 15: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, à 15: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, à 16: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, à 16: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, à 16: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, à 16:27)
Aku-Soku-Zan_Shinsengumi
Hors ligne
#11 Le 13/03/2008, à 16:32
- ®om
Hors ligne
#12 Le 13/03/2008, à 16: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, à 16: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, à 17: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, à 17: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, à 17: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, à 17:30)
Hors ligne
#17 Le 13/03/2008, à 18: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, à 18: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, à 18:10)
Aku-Soku-Zan_Shinsengumi
Hors ligne
#19 Le 13/03/2008, à 18: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, à 18:59
- Saito
Re : [Résolu] echo sur plusieurs lignes
Ah oui, j'avais oublié ça
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 )
Aku-Soku-Zan_Shinsengumi
Hors ligne
#21 Le 13/03/2008, à 19: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