Adiciona scripts do nautilus ao menu de contexto / ações

1

Então, para um curso que estou levando em sistemas operacionais, escolhi integrar um programa personalizado semelhante ao FTP no menu do botão direito (escrito em C) e tenho tido problemas em tentar obter os scripts. já fiz aparecer e trabalhar do jeito que eu quero.

O objetivo é torná-lo o mais integrado possível ao sistema operacional. Eu encontrei um tópico sobre como adicionar uma ação no menu normal do botão direito, mas eu tenho tido problemas para fazer com que meus scripts do nautilus funcionem corretamente.

O problema é que, mesmo com o script nas pastas de script do nautilus, executá-lo em uma ação nautilus não preenche as variáveis de seleção de arquivo ( NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ) que o script precisa para executar meu programa. No entanto, executá-los via menu de scripts faz. Gostaria de saber se é possível que isso funcione?

Aparece quando nenhum arquivo foi selecionado, pois isso iniciará meu programa para receber os arquivos. Eu preciso conseguir isso para poder obter a pasta que eu cliquei direito dentro se possível:

Issoaparecequandoalgunsarquivossãoselecionados,euprecisosercapazdeobteralistadosselecionadosparaquemeuprogramasaibaquaisarquivosenviar:

OquetenhoquefazeratualmenteéusaromenudescriptsIstoéindesejávelporqueomenudescriptssóaparecequandoumiteméselecionado:

Oqueeuquerofazerépossível?

Informaçõesadicionais:Oprogramaparaenviar/recebê-loséumservidordesoquetequeeuescrevi,estoucientedequeprovavelmentepoderiafazê-lomuitomaisfácilcomFTPbashsimples,maseunãomeuprofessorficariaimpressionadocomumalinhade4soluçãoemumprojetoatermo.

Estouescrevendoosscriptsnobash.

Aquiestáumexemplodocódigobash:

#!/bin/bashechoHelloWorld!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
    
por Thomas Migus 24.03.2018 / 04:55

1 resposta

1

Eu descobri a resposta, em suma, você precisa usar os parâmetros para dar suas variáveis. O parâmetro %b entrega o nome do arquivo como um argumento de linha de comando que pode ser acessado através do "$1" para o primeiro argumento. no caso de %B , você terá todos os arquivos como argumentos separados, então você precisará de "$1" "$2" etc ...

Você também pode usar $PWD para obter o diretório de trabalho atual. CONTUDO, há algumas coisas importantes a serem notadas sobre isso, já que o diretório de trabalho atual nem sempre é o que você imagina. Quando você tiver selecionado um arquivo na pasta, /home/admin/myStuff/test.txt o diretório de trabalho do script será /home/admin/myStuff . Portanto, você pode usar "$PWD/$1" para obter o diretório de trabalho atual + / + o arquivo selecionado. O código é o seguinte

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

Quando você não selecionou uma pasta, o diretor de trabalho é alterado. Vamos dizer que você clique com o botão direito no espaço vazio dentro de /home/admin/myStuff o diretório de trabalho será /home/admin NOT /home/admin/myStuff

Para selecionar o diretório de trabalho, você pode usar %b para saber em qual diretório você está. O código é o seguinte:

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

você mesmo pode testá-lo com este pequeno script

#!/bin/bash
zenity --info --text "$1"
zenity --info --text "$PWD"
    
por Thomas Migus 26.03.2018 / 19:17