Agregue scripts de Nautilus al menú contextual/acciones

Agregue scripts de Nautilus al menú contextual/acciones

Entonces, para un curso que estoy tomando sobre sistemas operativos, elegí integrar un programa personalizado similar a ftp en el menú contextual (escrito en C) y he tenido problemas al intentar obtener los scripts que hice. aparecen y funcionan como yo quiero.

El objetivo es que parezca lo más integrado posible en el sistema operativo. Encontré un tema sobre cómo agregar una acción en el menú contextual normal, pero he tenido problemas para que mis scripts de Nautilus funcionen correctamente.

El problema surge porque incluso con el script en las carpetas de scripts de Nautilus, ejecutarlo en una acción de Nautilus no completa las variables de selección de archivos ( NAUTILUS_SCRIPT_SELECTED_FILE_PATHS) que el script necesita para ejecutar mi programa. Sin embargo, ejecutarlos a través del menú de scripts sí lo hace. Me gustaría saber si es posible que esto funcione.

Esto aparece cuando no se han seleccionado archivos ya que esto iniciará mi programa para recibir los archivos. Necesito obtener esto para poder obtener la carpeta en la que hice clic derecho, si es posible:

Botón de recepción, ubicado en el menú contextual

Esto aparece cuando se seleccionan algunos archivos, necesito poder obtener la lista de los seleccionados para que mi programa sepa qué archivos enviar:

Botón Enviar, ubicado en el menú contextual

Lo que tengo que hacer actualmente es usar el menú de scripts. Esto no es deseable porque el menú de scripts solo aparece cuando se selecciona un elemento:

Lo que tengo que hacer actualmente, usar el menú de scripts.

¿Es posible lo que quiero hacer?

Información adicional: el programa para enviarlos/recibirlos es un servidor de socket que escribí. Soy consciente de que probablemente podría hacerlo mucho más fácilmente con un FTP bash simple, pero no sé, mi profesor quedaría impresionado con una solución de 4 líneas en un proyecto a plazo.

Estoy escribiendo los scripts en bash.

Aquí hay un ejemplo del código 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

Respuesta1

Descubrí la respuesta; en resumen, debes usar los parámetros para dar tus variables. El parámetro %bentrega el nombre del archivo como un argumento de línea de comando al que se puede acceder a través del "$1"primer argumento. en este caso, %Ble dará todos los archivos como argumentos separados, por lo que necesitará "$1" "$2", etc.

También puede utilizar $PWDpara obtener el directorio de trabajo actual. SIN EMBARGO, hay algunas cosas importantes a tener en cuenta al respecto, ya que el directorio de trabajo actual no siempre es lo que podría pensar que es. Cuando haya seleccionado un archivo en la carpeta, digamos, /home/admin/myStuff/test.txtel directorio de trabajo del script será /home/admin/myStuff. Por lo tanto, puede utilizar "$PWD/$1"para obtener el directorio de trabajo actual + /+ el archivo seleccionado. El código es el siguiente.

#!/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"

Cuando no ha seleccionado una carpeta, el director de trabajo cambia. Digamos que NO hará clic derecho en un espacio vacío dentro /home/admin/myStuffdel directorio de trabajo./home/admin/home/admin/myStuff

Para seleccionar el directorio de trabajo, puede utilizar %bpara obtener en qué directorio se encuentra realmente. El código es el siguiente:

#!/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"

puedes probarlo tú mismo con este pequeño script

#!/bin/bash
zenity --info --text "$1"
zenity --info --text "$PWD"

información relacionada