Supposons que j'ai un script comme celui-ci:
(L'exemple décrit un cas d'utilisation de rysnc)
#!/bin/bash
echo -n "Enter Source Directory:"
read srcdir
echo -n "Enter Destination Directory:"
read dstdir
rsync -av --delete "$srcdir" "$dstdir"
L'idée ici est d'inviter l'utilisateur à entrer dans les répertoires "Source" et "Destination" avec lesquels rsync peut travailler. Tel quel, l'utilisateur devra entrer manuellement /path/to/directory/
via la ligne de commande.
À la place , je souhaite demander à l'utilisateur de saisir les chemins d'accès via une interface graphique .
Quelque chose comme ça:
Quelles commandes puis-je utiliser pour demander à l'utilisateur une fenêtre de sélection d'interface graphique renvoyant le chemin du fichier à la ligne de commande?
Vous pouvez l'utiliser pour les fichiers:
zenity --file-selection
et ceci pour les dossiers:
zenity --file-selection --directory
pour utilisation, lancez:
zenity --help-general
zenity --help-file-selection
Généralement, il correspond au thème actuel (pour les gestionnaires de fenêtres GTK de toute façon), sur ma machine avec une version modifiée de Zukitwo 3.8, il ressemble à ceci:
Une façon de l'utiliser est la suivante:
echo "you selected $(zenity --file-selection)"
Ce qui donnerait you selected /path/to/file
.
Vous pouvez également utiliser les options pour définir un titre approprié et le répertoire dans lequel il commence - Avec votre cas d'utilisation rsync, par exemple:
zenity --file-selection --directory --title="Choose rsync source directory" --filename=$HOME/Desktop/
Pour les fichiers, vous pouvez également spécifier un type de fichier pour sélectionner - par exemple:
zenity --file-selection --file-filter='PDF files (pdf) | *.pdf' --title="Select a PDF file"
REMARQUE: Vous pouvez également utiliser YAD , un fork de Zenity qui contient plus de fonctionnalités.
Sudo add-apt-repository ppa:webupd8team/y-ppa-manager
Sudo apt-get update
Sudo apt-get install yad
Pour l'essentiel, vous pouvez l'utiliser de la même manière - pour le navigateur de fichiers:
yad --file-selection
et pour la page d'aide:
yad --help-all
Bien qu'à l'époque (autour de la version 26?), Il n'avait pas été mis à jour pour correspondre à la nouvelle interface GTK 3.14+ (zenity had) - il a plus de fonctionnalités, mais vérifiez la compatibilité (basé sur la documentation, il devrait fonctionner sur GTK +> = 2.16. 0
À titre d'information, vous pouvez utiliser dialog
pour une solution d'interface utilisateur à base de texte.
Syntaxe:
dialog --title "text" --fselect /path/to/dir height width
Exemple:
FILE=$(dialog --stdout --title "Please choose a file" --fselect $HOME/ 14 48)
echo "${FILE} file chosen."
La sortie sera quelque chose comme ça:
Comme l'a souligné @Wilf, vous pouvez utiliser les variables $LINES
et $COLUMNS
pour remplir le terminal:
$(dialog --stdout --title "Please choose a file" --fselect $HOME/ $(expr $LINES - 15) $(expr $COLUMNS - 10))
Je sais que cela fait 8 mois et que la question du PO a été résolue. Cependant, yad a été mentionné mais aucun exemple n’a été proposé. Voici ma solution en utilisant yad.
DIR="/home" \
i=0;for location in source destination
do
((i++));selection[$i]=$(yad --center \
--width 350 \
--form \
--title="yad example" \
--text="Select $location directory" \
--field=:LBL "" \
--field=Path:DIR "$DIR" \
--separator='' )
done;\
echo "Command to run is \"rsync -av --delete ${selection[1]} ${selection[2]}\""
La façon dont cela fonctionne est comme ça. Nous avons mis yad dans une boucle for, en définissant la variable $location
à source
pour la première passe et destination
pour la seconde. La sortie est placée dans le tableau selection[]
pour lequel la variable i
est utilisée comme index. Cette valeur est définie sur 0 au début et incrémentée à chaque passage. Par conséquent, la source est enregistrée sous le nom ${selection[1]}
et la destination ${selection[2]}
.
Le répertoire DIR = "/ home" sur la première ligne définit la boîte de dialogue par défaut. Les options de commande yad peuvent être trouvées à partir du terminal en tapant yad --help
.
Voici la solution la plus courte (et la meilleure) à la réponse: Yad
fournit l'option exacte exactement comme zenity
le fait:
yad --file-selection --directory
Cela ouvre une boîte de dialogue de sélection de répertoire. Sans l'argument supplémentaire --directory
, il s'agira plutôt d'une boîte de dialogue de sélection de fichier.