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 11/12/2008, à 20:34

maxim

"locate timidity.cfg | grep etc | cd" ne marche pas?

Bonjour,

Quand je lance la commande: "locate timidity.cfg | grep etc | cd", le répertoire ne change pas et je ne comprends pas pourquoi.
Pour info, la commande: "locate timidity.cfg | grep etc", renvoie "/etc/timidity/timidity.cfg".

Veuillez expliquer mon débutantisme absolu mais pourriez-vous m'expliquer pourquoi j'obtiens ce résultat et me donner une solution à ce problème.
(je sais que je peux tout simplement faire un copier/coller mais j'aimerais bien apprendre)


æâ€êþÿûîœô~øäßë‘’ðüïŀö´`«»© ↓¬¿×÷¡Æ¢ÊÞÞŸŸÛÎŒÔ˚ØÄ„Ë‚¥ÐÜÏĿÖÙ
⋅∕…→↑←Ŀ™Èɲ˘—–————‑È™ÇÀ≠±¸¸⇙⇓⇘⇐⇔⇒⇖⇑⇗⇕¯“”®←↑→…⋅∕−

Hors ligne

#2 Le 11/12/2008, à 20:57

HP

Re : "locate timidity.cfg | grep etc | cd" ne marche pas?

cd <<< echo "$(find timidity.cfg  -type d | grep "etc")"

C'est pas le top… je ne crois pas… mais ça doit déjà être mieux wink

Dans le même genre, il y a plus simple, mais c'est moins sûr… chez moi ça ne semble pas suivre correctement les liens symboliques :

cd <<< find timidity.cfg  -type d | grep etc

et pour faire un cd, faudrait que timidity.cfg soit un dossier, et là, j'ai comme un doute :

To use TiMidity you need a working timidity.cfg config file and some sound fonts

http://lau.linuxaudio.org/TiMidity-howto.html

Dernière modification par HP (Le 11/12/2008, à 21:06)


cat /dev/urandom >/dev/null 2>&1 #github

Hors ligne

#3 Le 11/12/2008, à 21:26

AnsuzPeorth

Re : "locate timidity.cfg | grep etc | cd" ne marche pas?

....
Y a aussi dirname.......(c'est un gars du forum qui me l'a dit...:rolleyes: tongue)

A vérifier (ca fonctionne chez moi avec d'autres fichiers)

cd $(dirname `locate timidity.cfg | grep etc`)

ptite explication:
cd → tu connais
dirname→ affiche le chemin du fichier
`` = $() donc pourrait s'écrire

cd $(dirname $(locate timidity.cfg | grep etc))

Je crois que c assez simple !

N'hésitez ps à rectifier si je dis des conneries, je suis pas un expert

Dernière modification par AnsuzPeorth (Le 11/12/2008, à 21:34)


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#4 Le 11/12/2008, à 21:39

HP

Re : "locate timidity.cfg | grep etc | cd" ne marche pas?

AnsuzPeorth a écrit :

....
Y a aussi dirname.......

ouais, c'est pas faux wink

dirname→ affiche le chemin du fichier

il va n'afficher que le nom du dossier… et non son chemin…


cat /dev/urandom >/dev/null 2>&1 #github

Hors ligne

#5 Le 11/12/2008, à 21:43

AnsuzPeorth

Re : "locate timidity.cfg | grep etc | cd" ne marche pas?

la commande: "locate timidity.cfg | grep etc", renvoie "/etc/timidity/timidity.cfg".

donc dirname là dessus ! on a /etc/timidity...non ?

yoanne@yoanne-desktop:~$ locate surebet
/home/yoanne/travail/surebet_rss
yoanne@yoanne-desktop:~$ dirname `locate surebet`
/home/yoanne/travail
yoanne@yoanne-desktop:~$ cd $(dirname `locate surebet`)
yoanne@yoanne-desktop:~/travail$

EDIT: Si une extension au fichier, ca marche po !!!!!Donc mauvaise solution

Dernière modification par AnsuzPeorth (Le 11/12/2008, à 21:53)


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#6 Le 11/12/2008, à 22:44

maxim

Re : "locate timidity.cfg | grep etc | cd" ne marche pas?

Merci pour toutes vos réponses!
Ca marche en faisant cela:
$ cd $(dirname $(locate timidity.cfg | grep etc))

N'empèche que j'aimerais bien comprendre pourquoi une commande du type:
$ echo "/home/" | cd
renvoie: "bash: echo: erreur d'écriture : Relais brisé (pipe)"

Et pendant que j'y suis; quelle est la différence entre $(commande) et `commande` ?

niarf... je suis un peu perdu dans tout ça donc si en plus vous avez un bon tutoriel mais pas trop prise de tête non plus... J'ai lu le tutoriel sur le site du zero mais c'est pas très complet pour l'instant.


æâ€êþÿûîœô~øäßë‘’ðüïŀö´`«»© ↓¬¿×÷¡Æ¢ÊÞÞŸŸÛÎŒÔ˚ØÄ„Ë‚¥ÐÜÏĿÖÙ
⋅∕…→↑←Ŀ™Èɲ˘—–————‑È™ÇÀ≠±¸¸⇙⇓⇘⇐⇔⇒⇖⇑⇗⇕¯“”®←↑→…⋅∕−

Hors ligne

#7 Le 11/12/2008, à 23:17

Totor

Re : "locate timidity.cfg | grep etc | cd" ne marche pas?

AnsuzPeorth a écrit :

....

cd $(dirname $(locate timidity.cfg | grep etc))

juste un petit truc : c'est loin d'être faux mais la bonne pratique est d'encadrer chaque évaluation des variables/résultats avec des guillemets lorsqu'il s'agit de noms de fichiers/dossiers afin d'éviter des problèmes avec les espaces :

cd "$(dirname "$(locate timidity.cfg | grep etc)")"
AnsuzPeorth a écrit :

EDIT: Si une extension au fichier, ca marche po !!!!!Donc mauvaise solution

Et pourquoi ?

$ dirname "$(pwd)/ubuntu-8.10-desktop-amd64.iso"
/download/Linux/ubuntu

HP a écrit :

dirname→ affiche le chemin du fichier

il va n'afficher que le nom du dossier… et non son chemin…

Pour être plus exacte :
basename : ne conserve que le dernier élément d'une chaine de caractère représentant un "chemin" (quelque soit l'élément pointé par ce chemin.). Il est aussi possible de supprimer un suffixe,
dirname : retourne ce que basename ne conserve pas. Donc le chemin qu'il soit relatif ou absolue. (Il ne retourne pas uniquement le nom du dossier)

A noter que ces 2 outils ne vérifient pas l'existante physique.


maxim a écrit :

N'empèche que j'aimerais bien comprendre pourquoi une commande du type:
$ echo "/home/" | cd
renvoie: "bash: echo: erreur d'écriture : Relais brisé (pipe)"

le | redirige la sortie standard vers l'entrée standard pour la commande. Un tube (pipe) relit alors les 2 commandes. Mais pour cela, il faut que la commande suivante puisse ouvrir le tube et ce n'est pas le cas de la commande cd. Le dossier doit absolument lui être indiqué en paramètre et non par l'entrée standard.
Pour contourner ce problème, tu peux utiliser xargs.
Exemple :

$echo toto|echo
<vide>
$echo toto|xargs echo
toto

Par contre, ça ne marche pas avec cd roll
si quelque pouvait me donner une explication.

maxim a écrit :

Et pendant que j'y suis; quelle est la différence entre $(commande) et `commande` ?

man bash

...
Substitution de commandes

La substitution de commandes permet de remplacer le nom d'une commande par son résultat. Il en existe deux formes :

    $(commande)

ou

    `commande`

Bash effectue la substitution en exécutant la commande et en la remplaçant par sa sortie standard, dont les derniers sauts de lignes sont supprimés. Les sauts de lignes internes ne sont pas supprimés mais peuvent disparaître lors du découpage en mots. La substitution de commande $(cat fichier) peut être remplacée par l'équivalent plus rapide $(< fichier).

Quand l'ancienne forme de substitution avec les backquotes ` est utilisée, le caractère antislash garde sa signification littérale, sauf s'il est suivi de $, `, ou \. La première backquote non protégée par un antislash termine la substitution de commande. Quand on utilise la forme $(commande), tous les caractères entre parenthèses gardent leurs valeurs littérales. Aucun n'est traité spécialement.

Les substitutions de commandes peuvent être imbriquées. Avec l'ancienne forme, il faut protéger les backquotes internes avec un backslash.

Si la substitution apparaît entre guillemets, le découpage des mots, et l'expansion des noms de fichiers ne sont pas effectués.
...

Dernière modification par Totor (Le 11/12/2008, à 23:20)


-- Lucid Lynx --

Hors ligne