Donc, pour un cours que je prends sur les systèmes d'exploitation, j'ai choisi d'intégrer un programme de type ftp personnalisé dans le menu contextuel (écrit en C) et j'ai eu des problèmes pour essayer d'obtenir les scripts que j'ai créés apparaître et travailler comme je le veux.
L'objectif est de le faire apparaître aussi intégré que possible dans l'OS. J'ai trouvé un sujet sur la façon d'ajouter une action dans le menu contextuel normal, mais j'ai eu du mal à faire fonctionner correctement mes scripts nautilus.
Le problème se pose que même avec le script dans les dossiers de script nautilus, l'exécuter dans une action nautilus ne remplit pas les variables de sélection de fichier (NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
) dont le script a besoin pour exécuter mon programme. Cependant, les exécuter via le menu des scripts le fait. Je voudrais savoir s'il est possible que cela fonctionne?
Cela apparaît quand aucun fichier n'a été sélectionné car cela démarrera mon programme pour recevoir les fichiers. J'ai besoin de cela pour pouvoir obtenir le dossier sur lequel j'ai cliqué avec le bouton droit si possible:
Cela apparaît lorsque certains fichiers sont sélectionnés, je dois pouvoir obtenir la liste de ceux sélectionnés afin que mon programme sache quels fichiers envoyer:
Ce que je dois faire actuellement, c'est utiliser le menu des scripts. Ce n'est pas souhaitable car le menu des scripts n'apparaît que lorsqu'un élément est sélectionné:
Est-ce que je veux faire?
Informations supplémentaires: Le programme pour les envoyer/recevoir est un serveur de socket que j'ai écrit, je suis conscient que je pourrais probablement le faire beaucoup plus facilement avec un simple bash FTP mais je ne pense pas que mon prof serait impressionné par une solution à 4 lignes sur un Projet final.
J'écris les scripts en bash.
Voici un exemple du code bash:
#!/bin/bash
echo Hello World!
IP=$(zenity --entry --text "What is the IP you want?" --entry-text "")
PORT=$(zenity --entry --text "What is the PORT you want?" --entry-text "3000")
for file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
do
zenity --info --text $file
/home/admin/fileSending/clientRecieve $IP $PORT "$file"
done
echo $IP
J'ai trouvé la réponse, en bref, vous devez utiliser les paramètres pour donner vos variables. Le paramètre %b
remet le nom du fichier comme argument de ligne de commande accessible via "$1"
pour le premier argument. dans le cas de %B
il vous donnera tous les fichiers comme arguments séparés, vous aurez donc besoin de "$1"
"$2"
etc...
Vous pouvez aussi utiliser $PWD
pour obtenir le répertoire de travail actuel. CEPENDANT, il y a des choses importantes à noter à ce sujet, car le répertoire de travail actuel n'est pas toujours ce que vous pourriez penser. Lorsque vous avez sélectionné un fichier dans le dossier, dites: /home/admin/myStuff/test.txt
le répertoire de travail du script sera /home/admin/myStuff
. Vous pouvez donc utiliser "$PWD/$1"
pour obtenir le répertoire de travail actuel + /
+ le fichier sélectionné. Le code est le suivant
#!/bin/bash
#Author: Thomas Migus, created on March 20th 2018
#this is a script that runs the client that will send the file.
FILE="$PWD/$1"
IP=$(zenity --entry --text "What is the IP you want?" --entry-text "127.0.0.1")
PORT=$(zenity --entry --text "What is the IP you want?" --entry-text "3000")
/home/admin/fileSending/clientSend $IP $PORT $FILE
zenity --info --text "File sent"
Lorsque vous n'avez pas sélectionné de dossier, le directeur de travail change. Disons que vous faites un clic droit sur un espace vide à l'intérieur /home/admin/myStuff
le répertoire de travail sera /home/admin
NE PAS /home/admin/myStuff
Pour sélectionner le répertoire de travail, vous pouvez utiliser %b
pour obtenir le répertoire dans lequel vous vous trouvez. Le code est le suivant:
#!/bin/bash
#Author: Thomas Migus, created on March 20th 2018
# This is a script which runs the server
OUTPUT="$PWD/$1/"
PORT=$(zenity --entry --text "What is the port number?" --entry-text "3000")
/home/admin/fileSending/serverRecieve $PORT $OUTPUT
zenity --info --text "File recieved"
vous pouvez le tester vous-même avec ce petit script
#!/bin/bash
zenity --info --text "$1"
zenity --info --text "$PWD"