Итак, для курса, который я беру в операционных системах, я решил интегрировать пользовательскую ftp-подобную программу в контекстное меню (написанное на C), и у меня возникли проблемы с попыткой получить скрипты I [make].
Цель состоит в том, чтобы заставить его казаться интегрированным в ОС, насколько это возможно. Я нашел тему о том, как добавить действие в обычное меню правой кнопки мыши, но у меня возникли проблемы с правильной работой скриптов nautilus.
Возникает проблема, что даже при использовании скрипта в Папки nautilus script, выполняющие его в действии nautilus, не заполняют переменные выбора файла (NAUTILUS_SCRIPT_SELECTED_FILE_PATHS), которые сценарий должен запускать моей программой. Однако запуск их через меню скриптов. Я хотел бы узнать, возможно ли это для этого?
Это появляется, когда файлы не были выбраны, так как это запустит мою программу для получения файлов. Мне нужно, чтобы это позволило получить папку, в которую я щелкнул, если это возможно:
Это появляется, когда некоторые файлы выбраны, мне нужно иметь возможность получить список выбранных, чтобы моя программа узнала, какие файлы отправить:
Что мне нужно сделать в настоящее время, так это использование меню сценариев. Это нежелательно, потому что меню сценариев появляется только при выборе элемента:
[!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
я не понял ответа, короче говоря, вы должны использовать параметры, чтобы дать ваши переменные. Параметр [Ф4] руки в Имя файла в качестве аргумента командной строки, которые могут быть доступны через [ф5] для первого аргумента. в случае [ф6] это даст вам все файлы, в качестве отдельных аргументов, так что вам потребуется [ф7] нажать [F8] и...
можно также использовать на [F9], чтобы получить текущий рабочий каталог. Однако, есть некоторые важные вещи, чтобы отметить об этом, так как текущий рабочий каталог-это не всегда то, что вам кажется. Когда вы выбрали файл в папку, [ф10] рабочая директория скрипта будет на [F11]. Поэтому вы можете использовать [F12] для получения текущего рабочего каталога + [от f13] + выбранный файл. Код выглядит следующим образом
[Ф1]если Вы не выбрали папку, директора по работе изменения. Допустим, вы щелкните правой кнопкой мыши на пустое пространство внутри [ф14] рабочий каталог будет [ф15] не [ф16]
для того чтобы выбрать рабочий каталог, вы можете использовать [f17 в], чтобы узнать, в какой директории ты на самом деле. Код выглядит следующим образом:
[Ф2]вы можете проверить его самостоятельно с помощью этого небольшого скрипта
[Ф3]Я понял ответ, короче говоря, вам нужно использовать параметры, чтобы дать свои переменные. Параметр %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"
Я понял ответ, короче говоря, вам нужно использовать параметры, чтобы дать свои переменные. Параметр %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"