将 nautilus 脚本添加到上下文菜单/操作

将 nautilus 脚本添加到上下文菜单/操作

因此,对于我正在学习的操作系统课程,我选择将自定义的类似 ftp 的程序集成到右键菜单中(用 C 编写),并且在尝试使我编写的脚本按我希望的方式出现和工作时遇到了问题。

目标是让它尽可能地集成到操作系统中。我找到了一个关于如何在常规右键单击菜单中添加操作的主题,但我一直无法让我的 nautilus 脚本正常工作。

问题在于,即使脚本位于 nautilus 脚本文件夹中,在 nautilus 操作中运行它也不会填充脚本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"

相关内容