將 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"

相關內容