有人可以告诉我如何计算所选项目的行号。我想要特定的行号来引用将处理不同文件的同一行的子例程。
#! /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
更新:
这是所读取项目的示例。我在上面的脚本中使用了水果来说明线条示例。这是具体项目的示例。正如您所看到的,一些实际文本是重复的,但在不同的行上。当用户选择一个项目时,我希望禅尼蒂有一个选项显示单击了哪一行。每次运行时都会有不同的项目列表。
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"]
答案1
这对我来说对 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
。