Добавьте сценарии nautilus в контекстное меню / действия

Итак, для курса, который я беру в операционных системах, я решил интегрировать пользовательскую ftp-подобную программу в контекстное меню (написанное на C), и у меня возникли проблемы с попыткой получить скрипты I [make].

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

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

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

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

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

Receiving button, located on the right click menu [!d6]

Является ли это возможным?

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

Я пишу скрипты в 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
задан 27 March 2018 в 22:16

3 ответа

я не понял ответа, короче говоря, вы должны использовать параметры, чтобы дать ваши переменные. Параметр [Ф4] руки в Имя файла в качестве аргумента командной строки, которые могут быть доступны через [ф5] для первого аргумента. в случае [ф6] это даст вам все файлы, в качестве отдельных аргументов, так что вам потребуется [ф7] нажать [F8] и...

можно также использовать на [F9], чтобы получить текущий рабочий каталог. Однако, есть некоторые важные вещи, чтобы отметить об этом, так как текущий рабочий каталог-это не всегда то, что вам кажется. Когда вы выбрали файл в папку, [ф10] рабочая директория скрипта будет на [F11]. Поэтому вы можете использовать [F12] для получения текущего рабочего каталога + [от f13] + выбранный файл. Код выглядит следующим образом

[Ф1]

если Вы не выбрали папку, директора по работе изменения. Допустим, вы щелкните правой кнопкой мыши на пустое пространство внутри [ф14] рабочий каталог будет [ф15] не [ф16]

для того чтобы выбрать рабочий каталог, вы можете использовать [f17 в], чтобы узнать, в какой директории ты на самом деле. Код выглядит следующим образом:

[Ф2]

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

[Ф3]
1
ответ дан 8 June 2018 в 15:18

Я понял ответ, короче говоря, вам нужно использовать параметры, чтобы дать свои переменные. Параметр %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 NOT /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"
1
ответ дан 17 July 2018 в 18:12

Я понял ответ, короче говоря, вам нужно использовать параметры, чтобы дать свои переменные. Параметр %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 NOT /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"
1
ответ дан 23 July 2018 в 19:01

Другие вопросы по тегам:

Похожие вопросы: