Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

trier /proc/pidof/fd marche pas dans un script

10 réponses
Avatar
Hugolino
Bonsoir

Mon script qui permet de jouer des mp3, permet aussi d'afficher la liste
des mp3 déjà joués ainsi que celui en cours...

Pour que la liste des morceaux joués soit triée, j'ai amoureusement mis
au point la ligne suivante:
ls -l /proc/$pid/fd | grep "/mnt/MP3" | cut -b 62- | sort -n | cut -d /
-f 4
(après avoir fait: pid=`pidof mpg321`)

En effet, tous les fichiers de ce répertoire ont la même date/heure,
donc il est inutile d'invoquer ls avec l'option 't'

Et ça marche très bien dans une fenêtre de terminal.

J'inclus donc la ligne dans mon script et teste. Big Problem ! la liste
des morceaux joués n'est plus triées par date mais par le nom des
morceaux déjà joués (avec ACDC en tête et ZZTop à la fin donc)

Comment cela se fait-il ?

On dirait que mon script fait les 'cut' avant le 'sort'...


Peut-être dois-je détailler comment ma ligne fonctionne...

Dans /proc/399/fd, tous les fichiers sont des liens et le nom de ces
liens est un numéro. (0 pointe vers /dev/null, 1 et 2 vers /dev/console,
3 vers /etc/libao.conf, 4 vers le premier mp3 joué, 5 vers /dev/dsp, 6
vers le 2ème morceau joué et ainsi de suite, jusqu'à 57)

Exemple: 'ls -l 56' donne:
0 lr-x------ 1 hugo hugo 64 fév 24 02:27 56 ->
/mnt/MP3/Thiéfaine_89_84-88_02_Sweet_Amanite_Phalloïde_Queen.mp3

Le '| grep "/mnt/MP3"' ne garde que les lignes concernant les mp3 joués.
Le '| cut -b 62-' vire les 61 premiers octets, ainsi la liste obtenue
commence par le nom du lien (qui est un numéro je le rappelle), comme
ceci:
56 -> /mnt/MP3/Thiéfaine_89_84-88_02_Sweet_Amanite_Phalloïde_Queen.mp3
Le '| sort -n' trie donc la liste suivant le numéro du lien (c'est à
dire suivant l'ordre dans lequel les morceaux ont été joués).
Le '| cut -d / -f 4' ne garde que le 4ème champ: le nom du morceau.


Merci de m'aider à éclaircir ce mystère.
(Si une commande ne donne pas le même résultat en ligne de commande que
dans un script, où va-t-on ma bonne dame ?)

--
Il y en a qui ne savent pas déballer leur ordinateur de la boîte
d'emballage. Faudrait aussi prévoir une doc là-dessus (parce que celle
fournie avec la boîte, il y a plein de mots et pas beaucoup d'images)
-+- Jaco in Guide du Linuxien pervers - "[OUI] à fcol.deballage" -+-

10 réponses

Avatar
I love cats
Bonsoir,

A mon avis, le "ls" que tu utilises en console est un alias (au hasard
sur "ls -s") et donc affiche des lignes de format un peu différent de
ce qu'affiche /bin/ls.

J'ai fait l'essai ici, et pour obtenir ce que tu voudrais, il faut
faire un "cut -b 56-"

--
"Never ascribe to malice what can be explained by human stupidity"
R. A. Heinlein
Avatar
TiChou
Dans l'article news:,
Hugolino écrivait :

Bonsoir


Bonsoir,

Mon script qui permet de jouer des mp3, permet aussi d'afficher la liste
des mp3 déjà joués ainsi que celui en cours...

Pour que la liste des morceaux joués soit triée, j'ai amoureusement mis
au point la ligne suivante:
ls -l /proc/$pid/fd | grep "/mnt/MP3" | cut -b 62- | sort -n | cut -d /
-f 4
(après avoir fait: pid=`pidof mpg321`)


La commande suivante :

find /proc/$pid/fd -type l -lname '/mnt/MP3/*' -printf "%l"
| xargs -0i basename {}

ne répondrait-elle pas à ce que vous recherchez ?

--
TiChou

Avatar
Hugolino
Le Wed, 25 Feb 2004 01:37:37 +0100, TiChou a écrit:
La commande suivante :

find /proc/$pid/fd -type l -lname '/mnt/MP3/*' -printf "%l"
| xargs -0i basename {}

ne répondrait-elle pas à ce que vous recherchez ?


Elle y répond parfaitement. Merci

--
Hugo NPN (i --> ee)
Mais ce coup-ci, promis, c'est bon. Les réservoirs de cosmogol sont pleins, et
ça va marcher. Aussi vrai que Ga et Bu font ZoMeu.
-+- http://michel.arboi.free.fr/ -+-

Avatar
Hugolino
Le Tue, 24 Feb 2004 21:21:09 +0100, I love cats a écrit:
Bonsoir,


Bonjour

A mon avis, le "ls" que tu utilises en console est un alias (au hasard
sur "ls -s") et donc affiche des lignes de format un peu différent de
ce qu'affiche /bin/ls.


Arf ! Le piège delamorkitu...

Est-ce encore cette *sombre* histoire d'héritage ?
Mon script s'exécute dans un sous-shell du terminal à partir duquel il
est lancé, mais puisque ce n'est pas un shell de login le ~/.bashrc
n'est pas lu et donc il ne connait pas, entre autre, les alias d'un
shell "normal".


J'ai fait l'essai ici, et pour obtenir ce que tu voudrais, il faut
faire un "cut -b 56-"


Yep

Merci


--
Hugo NPN (i --> ee)
Le MLLL (mouvement lesbien pour le logiciel libre) vient de choisir Tuxette
comme emblème. "Vous voulez vraiment savoir pourquoi nous avons pris une
pingouine comme mascotte ?" a déclaré la leadeuse du mouvement. (zipiz.com)

Avatar
Nicolas Le Scouarnec
Mon script s'exécute dans un sous-shell du terminal à partir duquel il
est lancé, mais puisque ce n'est pas un shell de login le ~/.bashrc
n'est pas lu et donc il ne connait pas, entre autre, les alias d'un
shell "normal".


Tous les shells lisent ~/.bashrc. Le script qui n'est lu que par les
shells de login est ~/.bash_profile .

--
Nicolas Le Scouarnec
http://nlsn.free.fr (Slrnfr, Docs Linux/BSD, La grippe, ... )

Avatar
Erwan David
Nicolas Le Scouarnec écrivait :


Tous les shells lisent ~/.bashrc. Le script qui n'est lu que par les
shells de login est ~/.bash_profile .


???

tcsh, zsh et autre ne lisent pas le .bashrc ?

--
Real programs don't eat cache

Avatar
Stephane Chazelas
2004-02-25, 19:12(+00), Nicolas Le Scouarnec:
[...]
Tous les shells lisent ~/.bashrc. Le script qui n'est lu que par les
shells de login est ~/.bash_profile .


Non, les bash de login et les bash non-interactifs (comme ceux
qui executent les scripts ou de bash -c, ou --norc) ne lisent
pas ~/.bashrc.

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]

Avatar
Nicolas Le Scouarnec
Tous les shells lisent ~/.bashrc. Le script qui n'est lu que par les
shells de login est ~/.bash_profile .
tcsh, zsh et autre ne lisent pas le .bashrc ?



Oupps, effectivement. Je voulais dire tous les shells lancés. Après, il
faut adapter .zshrc .zprofile et compagnie.



--
Nicolas Le Scouarnec
http://nlsn.free.fr (Slrnfr, Docs Linux/BSD, La grippe, ... )


Avatar
Stephane Chazelas
2004-02-26, 12:31(+00), Nicolas Le Scouarnec:
Tous les shells lisent ~/.bashrc. Le script qui n'est lu que par les
shells de login est ~/.bash_profile .
tcsh, zsh et autre ne lisent pas le .bashrc ?



Oupps, effectivement. Je voulais dire tous les shells lancés. Après, il
faut adapter .zshrc .zprofile et compagnie.


Le comportement est différent et plus complet et cohérent avec
zsh.

info -f zsh -n Files

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]



Avatar
Moi
Dans l'article
écrivait :

Nicolas Le Scouarnec écrivait :

Tous les shells lisent ~/.bashrc. Le script qui n'est lu que par les
shells de login est ~/.bash_profile .


???

tcsh, zsh et autre ne lisent pas le .bashrc ?


ash ne lit pas le .bashrc ?
ksh non plus ?