Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 23-01-2017 08:48:02

MicP
Membre
Distrib. : debian stable
Noyau : Linux 3.16.0-4-amd64
(G)UI : Xfce
Inscription : 29-02-2016

Thunar : ouvrir un onglet pour chaque répertoire de la liste donnée

#!/bin/bash

# nécessite xdotool
# en paramètre : la liste des répertoires à ouvrir dans un nouvel onglet

[ $# -eq  0 ] && exit 1

while [ ! -d "$1" ]
do
  shift
done

thunar "$1"
shift

while [ $# -gt 0 ]
do
    [ -d "$1" ] && { xdotool key Ctrl+t Ctrl+l type "$1"; xdotool key Return; }
    shift;
done

Hors ligne

#2 23-01-2017 22:55:49

Watael
Membre
Distrib. : Debian GNU/Linux 8.6 (jessie)
Noyau : Linux 3.16.0-4-amd64
(G)UI : xmonad, i3, dwm
Inscription : 19-01-2017

Re : Thunar : ouvrir un onglet pour chaque répertoire de la liste donnée

salut,

pourquoi pas « jusqu'à vrai », plutôt que « tant que n'est pas vrai » ?
pourquoi pas une bête boucle « for i do test -d "$i" && { xdotool... » ?

Hors ligne

#3 24-01-2017 00:51:26

MicP
Membre
Distrib. : debian stable
Noyau : Linux 3.16.0-4-amd64
(G)UI : Xfce
Inscription : 29-02-2016

Re : Thunar : ouvrir un onglet pour chaque répertoire de la liste donnée

Pour lancer thunar, j'avais besoin de vérifier que le répertoire qu'on lui donnait en paramètre était bien un nom de répertoire (qui aurait pû être mal orthographié ou autre),
donc :

tant qu'il ne s'agit pas d'un nom de répertoire, passe au paramètre suivant avec shift

Une fois thunar lancé avec son répertoire à visualiser, le deuxième while me permet d'ouvrir un onglet par répertoire en vérifiant  d'abord s'il s'agit bien d'un nom de répertoire.
Il aurait tout aussi bien fonctionner avec un for… mais come j'avais commencé avec un while, je me suis dit qu'il serait plus simple à lire pour un même résultat.

Mais je ne suis pas allé vérifier si un while … shift était plus économique qu'un for…et vu mon petit niveau d'autodidacte bricoleur,  je suis toute ouie et te remercie pour les conseils que tu me donnes.

=======

J'aurais dû donner le lien dans lequel la demande avait été formulée, alors le voici : http://linuxfr.org/forums/programmation … e-commande

Hors ligne

#4 24-01-2017 01:04:54

Watael
Membre
Distrib. : Debian GNU/Linux 8.6 (jessie)
Noyau : Linux 3.16.0-4-amd64
(G)UI : xmonad, i3, dwm
Inscription : 19-01-2017

Re : Thunar : ouvrir un onglet pour chaque répertoire de la liste donnée

tant qu'il ne s'agit pas d'un nom de répertoire, passe au paramètre suivant avec shift

soit, mais pourquoi pas "jusqu'à ce qu'il s'agisse d'un nom de répertoire" ?
« tant que n'est pas vrai », c'est comme `test ! -z "$var" ', alors que `test -n "$var" ' est plus simple, tu aurais pu écrire `until test -d "$1"; do shift; done '.
je trouve `until ' sous-employé, donc j'en fais la promotion. wink

boucle while ou for, je ne saurais pas dire s'il y en a une plus économique/performante que l'autre. hmm
une boucle for semble plus évidente, et utiliserait une commande de moins (shift)...

Hors ligne

#5 24-01-2017 01:39:12

MicP
Membre
Distrib. : debian stable
Noyau : Linux 3.16.0-4-amd64
(G)UI : Xfce
Inscription : 29-02-2016

Re : Thunar : ouvrir un onglet pour chaque répertoire de la liste donnée

C'est vrais que ce pauvre until est presque toujours oublié, et je ne pense même plus à l'utiliser,
du coup, je vais proposer à la fin de ce message la nouvelle version de ce fichier.

Pour la commande for, j'ai pas encore pris l'habitude de penser à l'utiliser sans incrémenter une variable pour la comparer au nombres de données à lire.

il me faudra encore des années de pratique, et surtout de nombreux cas différents à étudier, c'est d'ailleurs grâce aux forums que je peux en apprendre le plus car j'y trouve une grande diversité de problèmes toujours enrichissants pour moi qui ne les aurai peut-être jamais rencontrés, tout seul, sur mes quelques machines (pas assez de diversité) et presque toujours dans le même contexte.

=======

#!/bin/bash

mesg="Syntaxe : $0 nomDeRepertoire1 [nomDeRepertoire2]...\n"

[ $# -eq  0 ] && { printf "\n\t%s\n\n" "$mesg"; exit 1; }

until test -d "$1"; do shift; done

thunar "$1"; shift

for rep in ${@}
do
   test -d "$rep" && { xdotool key Ctrl+t Ctrl+l type "$rep"; xdotool key Return; }
done

Dernière modification par MicP (25-01-2017 11:54:55)

Hors ligne

#6 24-01-2017 02:32:03

Watael
Membre
Distrib. : Debian GNU/Linux 8.6 (jessie)
Noyau : Linux 3.16.0-4-amd64
(G)UI : xmonad, i3, dwm
Inscription : 19-01-2017

Re : Thunar : ouvrir un onglet pour chaque répertoire de la liste donnée

j'ai hésité à le dire, mais je vois que j'aurais dû : les messages d'erreur doivent être envoyés vers la sortie... d'erreur !

$@ doit être entre guillemets :

$ maFonc() { printf '%s\n' $@; echo -----; printf '%s\n' "$@";}
$ maFonc a 'b c' d
a
b
c
d
-----
a
b c
d
 

et, il est facultatif :

maFonc() { for i do echo "$i"; done;}
maFonc a 'b c' d
a
b c
d

Hors ligne

#7 24-01-2017 02:54:24

MicP
Membre
Distrib. : debian stable
Noyau : Linux 3.16.0-4-amd64
(G)UI : Xfce
Inscription : 29-02-2016

Re : Thunar : ouvrir un onglet pour chaque répertoire de la liste donnée

Merci de me l'avoir rappelé,  d'autant que Almesh me l'avait déjà fait remarqué sur debian-fr.org

Merci aussi pour la démonstration très claire.

Donc :

#!/bin/bash

# thunar : Un onglet pour chaque répertoire de la liste donnée en paramètre
# Ce script utilise xdotool

mesg="Syntaxe : $0 nomDeRepertoire1 [nomDeRepertoire2]..."

[ $# -eq  0 ] && { printf "\n\t%s\n\n" "$mesg" 1>&2; exit 1; }

until test -d "$1"; do shift; done

thunar "$1"; shift

for rep; do test -d "$rep" && { xdotool key Ctrl+t Ctrl+l type "$rep"; xdotool key Return; }; done
 

Dernière modification par MicP (25-01-2017 11:56:48)

Hors ligne

#8 04-02-2017 22:35:09

MicP
Membre
Distrib. : debian stable
Noyau : Linux 3.16.0-4-amd64
(G)UI : Xfce
Inscription : 29-02-2016

Re : Thunar : ouvrir un onglet pour chaque répertoire de la liste donnée

Nouvelle version : J'avais oublié qu'utiliser ce script pour n'ouvrir qu'un seul onglet ne sert à rien,
donc, j'ai fait en sorte qu'il faille donner au minimum deux paramètres sur la ligne de commandes pour que ce script lance thunar.

#!/bin/bash

# thunar : Un onglet pour chaque répertoire de la liste donnée en paramètre
# Ce script utilise xdotool

mesg="Syntaxe : $0 nomDeRepertoire1 nomDeRepertoire2 [nomDeRepertoire3]..."  # Message d'aide

[ $# -lt 2 ] && { printf "\n\t%s\n\n" "$mesg" 1>&2; exit 1; }                # Si il a moins de deux paramètres donnés, afficher le message d'aide, puis quitter avec le code d'erreur N°1

until test -d "$1"; do shift; done                                           # Tant que le paramètre n'est pas un nom de répertoire, passer au paramètre suivant

thunar "$1"; shift                                                           # lancer thunar en lui donnant le premier nom de répertoire à ouvrir

for rep; do test -d "$rep" && { xdotool key Ctrl+t Ctrl+l type "$rep"; xdotool key Return; }; done  # Ouvrir dans un nouvel onglet tous les autres répertoires de la liste

Hors ligne

Pied de page des forums