Dodaj skrypty nautilus do menu / akcji kontekstowych

1

Więc na kurs, który biorę w systemach operacyjnych, postanowiłem zintegrować niestandardowy program podobny do ftp do menu prawego przycisku myszy (napisanego w C) i miałem problemy z próbą pobrania skryptów, które wykonałem pojawiają się i działają tak, jak chcę.

Celem jest, aby wyglądał jak najbardziej zintegrowany z systemem operacyjnym. Znalazłem temat dodawania akcji w menu zwykłego kliknięcia prawym przyciskiem myszy, ale miałem problemy z poprawnym działaniem moich skryptów nautilus.

Powstaje problem, że nawet w przypadku skryptu w folderach skryptów nautilus, uruchomienie go w akcji nautilus nie wypełnia zmiennych wyboru plików ( NAUTILUS_SCRIPT_SELECTED_FILE_PATHS), które skrypt musi uruchomić mój program. Jednak działa je za pomocą menu skryptów. Chciałbym wiedzieć, czy to możliwe, aby to zadziałało?

Pojawia się, gdy nie wybrano żadnych plików, ponieważ spowoduje to uruchomienie mojego programu do odbierania plików. Muszę to uzyskać, aby uzyskać folder, który kliknąłem prawym przyciskiem myszy, jeśli to możliwe:

Przycisk odbioru, znajduje się w menu po kliknięciu prawym przyciskiem myszy

Pojawia się po wybraniu niektórych plików, muszę mieć możliwość wyboru listy wybranych, aby mój program wiedział, które pliki wysłać:

Przycisk Wyślij, znajdujący się w menu po kliknięciu prawym przyciskiem myszy

Muszę obecnie korzystać z menu skryptów. Jest to niepożądane, ponieważ menu skryptów pojawia się tylko po wybraniu elementu:

Co muszę teraz zrobić, skorzystaj z menu skryptów

Czy to, co chcę zrobić, jest możliwe?

Informacje dodatkowe: Program do wysyłania / odbierania jest serwerem gniazd, który napisałem. Wiem, że prawdopodobnie mógłbym to zrobić o wiele łatwiej za pomocą zwykłego bash FTP, ale nie jestem pewien, że mój profesor byłby pod wrażeniem 4-liniowego rozwiązania na projekt semestralny.

Piszę skrypty w bash.

Oto przykład kodu 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
Thomas Migus
źródło

Odpowiedzi:

1

Wymyśliłem odpowiedź, krótko mówiąc, musisz użyć parametrów, aby podać swoje zmienne. Parametr %bpodaje nazwę pliku jako argument wiersza poleceń, do którego można uzyskać dostęp za "$1"pomocą pierwszego argumentu. w przypadku %Btego da ci wszystkie pliki jako osobne argumenty, więc będziesz potrzebować "$1" "$2"etc ...

Możesz także użyć, $PWDaby uzyskać bieżący katalog roboczy. JEDNAK należy pamiętać o kilku ważnych kwestiach, ponieważ bieżący katalog roboczy nie zawsze jest taki, jak mogłoby się wydawać. Po wybraniu pliku w folderze powiedzmy, /home/admin/myStuff/test.txtże katalogiem roboczym skryptu będzie /home/admin/myStuff. Możesz zatem użyć, "$PWD/$1"aby uzyskać bieżący katalog roboczy + /+ wybrany plik. Kod jest następujący

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

Jeśli nie wybierzesz folderu, dyrektor roboczy zmieni się. Powiedzmy, że kliknięcie prawym przyciskiem myszy pustego miejsca w /home/admin/myStuffkatalogu roboczym /home/adminNIE będzie/home/admin/myStuff

Aby wybrać katalog roboczy, możesz użyć tego, %baby uzyskać katalog, w którym faktycznie się znajdujesz. Kod jest następujący:

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

możesz to przetestować samodzielnie za pomocą tego małego skryptu

#!/bin/bash
zenity --info --text "$1"
zenity --info --text "$PWD"
Thomas Migus
źródło