我需要一些关于 Yad 的帮助。这是我的代码:
contact=$(while read line
do
firstname=$(echo $line | awk 'BEGIN { FS="|" } { print $2 }')
lastname=$(echo $line | awk 'BEGIN { FS="|" } { print $3 }')
num=$(echo $line | awk 'BEGIN { FS="|" } { print $4 }')
birthday=$(echo $line | awk 'BEGIN { FS="|" } { print $5 }')
if [ $firstname != "" -a $lastname != "" ] ; then
echo "$firstname$lastname"
else
if [ $firstname != "" ] ; then
echo "$firstname,"
elif [ $lastname != "" ] ; then
echo "$lastname"
else
echo "$num"
fi
fi
done < "contactlist.txt" )
idlist=$(while read line
do
idnum=$(echo $line | awk 'BEGIN { FS="|" } { print $1}')
echo $idnum
done < "contactlist.txt" )
sortcontact=$(printf "%s\n" $contact | sort)
selected=$(yad --title="Contacts" --width=200 --height=200 --button="DISPLAY:2" --button="ADD:3" --list --separator="" --column="List" $sortcontact --column="ID:NUM" $idlist)
$idlist
和中的输出$sortcontact
都混淆了。
我希望列 ID 应该只包含 ,$idlist
而列列表应该只包含$sortcontact
。
答案1
我不知道,但它显然是 zenity 的一个分支,因此您可能需要以与 zenity 相同的方式向它提供物品;name1 id1 name2 id2
而不是name1 name2 id1 id2
。
我认为,像这样的东西应该接近你想要的。
#!/usr/bin/env bash
items=()
while IFS='|' read -r idnum firstname lastname num birthday _; do
if [[ $firstname || $lastname ]]; then
items+=( "$firstname $lastname" "$idnum" )
else
items+=( "$num" "$idnum" )
fi
done < <(sort -t'|' -k2 contactlist.txt)
selected=$(yad --title=Contacts --width=200 --height=200 \
--button=DISPLAY:2 --button=ADD:3 --list \
--separator= --column=List --column=ID:NUM \
"${items[@]}")