web-dev-qa-db-fra.com

Ajouter des scripts nautilus au menu contextuel / actions

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:

Receiving button, located on the right click menu

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:

Send button, located on the right click menu

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é:

What I have to do currently, use the scripts menu

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
1
Thomas Migus

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"
1
Thomas Migus