Добавить скрипты Nautilus в контекстное меню/действия

Добавить скрипты Nautilus в контекстное меню/действия

Поэтому для курса по операционным системам я решил интегрировать пользовательскую программу, похожую на FTP, в контекстное меню (написанное на языке C), и у меня возникли проблемы с тем, чтобы созданные мной скрипты отображались и работали так, как мне нужно.

Цель состоит в том, чтобы сделать его максимально интегрированным в ОС. Я нашел тему о том, как добавить действие в обычное контекстное меню, но у меня возникли проблемы с тем, чтобы заставить мои скрипты Nautilus работать правильно.

Проблема возникает в том, что даже при наличии скрипта в папках скриптов nautilus, запуск его в действии nautilus не заполняет переменные file-select ( NAUTILUS_SCRIPT_SELECTED_FILE_PATHS), которые нужны скрипту для запуска моей программы. Однако запуск их через меню скриптов заполняет. Я хотел бы знать, возможно ли, чтобы это работало?

Это появляется, когда не выбрано ни одного файла, так как это запустит мою программу для получения файлов. Мне нужно, чтобы это было возможно, чтобы получить папку, по которой я щелкнул правой кнопкой мыши, если это возможно:

Кнопка получения, расположенная в контекстном меню.

Это появляется, когда выбраны некоторые файлы. Мне нужно получить список выбранных файлов, чтобы моя программа знала, какие файлы отправлять:

Кнопка «Отправить», расположенная в контекстном меню.

В настоящее время мне приходится использовать меню скриптов. Это нежелательно, поскольку меню скриптов появляется только при выборе элемента:

Что мне нужно сделать сейчас, использовать меню скриптов

Возможно ли то, что я хочу сделать?

Дополнительная информация: Программа для их отправки/получения — это написанный мной сокет-сервер. Я понимаю, что, вероятно, это можно было бы сделать гораздо проще с помощью простого Bash FTP, но я не думаю, что мой профессор был бы впечатлен решением из 4 строк в курсовом проекте.

Я пишу скрипты на bash.

Вот пример кода 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

Я понял ответ, короче говоря, вам нужно использовать параметры, чтобы задать ваши переменные. Параметр %bпередает имя файла как аргумент командной строки, к которому можно получить доступ через "$1"для первого аргумента. в случае он %Bдаст вам все файлы как отдельные аргументы, поэтому вам понадобится "$1" "$2"и т. д...

Вы также можете использовать $PWDдля получения текущего рабочего каталога. ОДНАКО, есть несколько важных вещей, которые следует отметить по этому поводу, так как текущий рабочий каталог не всегда то, что вы могли бы подумать. Когда вы выбрали файл в папке, скажем, /home/admin/myStuff/test.txtрабочий каталог скрипта будет /home/admin/myStuff. Поэтому вы можете использовать "$PWD/$1"для получения текущего рабочего каталога + /+ выбранный файл. Код выглядит следующим образом

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

Если вы не выбрали папку, рабочий директор меняется. Допустим, вы нажимаете правой кнопкой мыши на пустом месте внутри /home/admin/myStuffрабочего каталога, и это /home/adminНЕ будет/home/admin/myStuff

Чтобы выбрать рабочий каталог, вы можете использовать , %bчтобы узнать, в каком каталоге вы фактически находитесь. Код выглядит следующим образом:

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

Вы можете проверить это самостоятельно с помощью этого небольшого скрипта

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

Связанный контент