Zenity

如何獲取 Zenity 選定項目的行號

  • December 8, 2016

有人可以告訴我如何計算所選項目的行號。我希望有特定的行號來引用將處理不同文件的同一行的子常式。

#! /bin/bash

item=$(zenity --list "Apples" "Peaches" "Pumpkin" "Pie" \
--column="Select your choice" --text="Text above column(s)" --title="My menu")

linenumber=x # Formula to calculate the line number of the selected item here

echo "You selected: $item which is in line number: $linenumber" 

所需的輸出是:

You selected Peaches which is in line number: 2

更新:

這是讀取的項目的範例。我使用上面腳本中的水果來說明一個線條範例。這是特定項目的範例。如您所見,一些實際文本是重複的,但在不同的行上。當使用者選擇一個項目時,我希望Zenity有一個選項來顯示點擊了哪一行。每次執行時,它都會有不同的項目列表。

cairo-dock
Desktop
XdndCollectionWindowImp
unity-launcher
unity-panel
unity-panel
unity-dash
Hud
Your turn - Play esskwa003 in HneO9CtF • lichess.org - Google Chrome
ljames@ubunzeus
ljames@ubuntuserver
ljames@hera5
site
site
ljames@ubunzeus
launcher - Add Unity Entry for Locally Installed Program - Ask Ubuntu - Google Chrome
ljames@ubunzeus
eclipse desktop launcher categories - Google Search - Google Chrome
launcher - Add Unity Entry for Locally Installed Program - Ask Ubuntu - Google Chrome
eclipse
MightyText - Google Chrome
launcher - Add Unity Entry for Locally Installed Program - Ask Ubuntu - Google Chrome
ljames@ubunzeus
Inbox - L. D. James - Mozilla Thunderbird
ljames@hera5
ljames@hera5
ljames@ubunzeus
ljames@hera5
How to get the line number of a Zenity selected Item - Unix & Linux Stack Exchange - Google Chrome
workspace - MyPyDev - ShellTools/SEWork/SEWork/hkrecord.sh - Eclipse - /home/users/l/j/ljames/workspace 
email - Mozilla Thunderbird
command line - Is it possible to control the recording if Audacity is running in the background? - Ask Ubuntu - Google Chrome
Bookmark Manager - Google Chrome
Formatting Sandbox - Meta Stack Exchange - Google Chrome
Apollo III Support - Backing up the Office Computer - Mozilla Thunderbird

這是我呼叫上述數據的確切塊:

#!/bin/bash

INPUT=$HOME/infile.txt
# IFS=$'\n'
item=$(while read l
do
   echo "$l"
done <$INPUT|zenity --list --text "sample text " --column "Choose") 
echo "You selected: [$item] which is in line number: [$linenumber"]

這對我有用 yad 和 zenity,並且列 ID 在 GUI 中不可見:

zenity --list 1 "Apples" 2 "Peaches" 3 "Pumpkin" 4 "Pie" --column="id" \
--column="Select your choice" --hide-column=1 --print-column=1

awk現在,為了在輸入是文件時實現相同的效果,您可以使用eg預處理文件

awk '{print NR};1' infile並將結果傳遞給zenity.

因為,根據文件

Zenity 將所選行的第一列文本中的條目返回到標準輸出。

$item只儲存行號。(這是第一列中的條目),而不是行內容。

要獲取行內容,您必須再次處理文件並根據行號提取該行。所以

linenumber=$(awk '{print NR};1' infile | zenity --list --column="No" \
--column="Select your choice" --text="Text above column(s)" \
--title="My menu" --hide-column=1)

然後

linecontent=$(sed ${linenumber}'!d;q' infile)

因此,現在您將所選行的編號及其內容分別保存到linenumber和 中linecontent

引用自:https://unix.stackexchange.com/questions/328508