Ao criar o script --menu
com dialog
, a primeira coluna no menu é um tag , que você pode escolher se deseja exibir ou não. Quando o menu está OK, dialog
escreve essas tags em sua saída (normalmente para o erro padrão, mas a opção --stdout
ajuda).
Se você fizer o endereço IP de uma tag, poderá obter os endereços diretamente da execução de dialog
.
No manual , este recurso opcional é descrito aqui:
--no-items
Some widgets (checklist, inputmenu, radiolist, menu) display a
list with two columns (a "tag" and "item", i.e., "description").
This option tells dialog to read shorter rows, omitting the
"item" part of the list. This is occasionally useful, e.g., if
the tags provide enough information.
See also --no-tags. If both options are given, this one is ig-
nored.
e
--no-tags
Some widgets (checklist, inputmenu, radiolist, menu) display a
list with two columns (a "tag" and "description"). The tag is
useful for scripting, but may not help the user. The --no-tags
option (from Xdialog) may be used to suppress the column of tags
from the display. Unlike the --no-items option, this does not
affect the data which is read from the script.
Xdialog does not display the tag column for the analogous
buildlist and treeview widgets; dialog does the same.
Normally dialog allows you to quickly move to entries on the
displayed list, by matching a single character to the first
character of the tag. When the --no-tags option is given, dia-
log matches against the first character of the description. In
either case, the matchable character is highlighted.
Você pode selecionar as linhas de /etc/hosts
de várias maneiras, por exemplo, usando sed
:
sed -e '1,/# ETHERNET SWITCHES/d' -e '/# END SWITCHES/,9999d' /etc/hosts
e você pode redirecioná-lo para sua linha de comando para dialog
, colocando-o em $(
e )
.
Combinando seu atalho 1,2,3 com o SW1, SW2, SW3 na descrição e usando a opção --no-tags
, você pode manter o endereço IP e a descrição associados.
O exemplo que você tem em mente pode ser algo assim:
#!/bin/bash
INPUT=/etc/hosts
let i=0 # define counting variable
W=() # define working array
while read -r addr line; do # process file by file
let i=$i+1
W+=($addr "$i $line")
done < <( sed -e '1,/# ETHERNET SWITCHES/d' -e '/# END SWITCHES/,9999d' $INPUT )
FILE=$(dialog --stdout --no-tags --title "List of Switches in /etc/hosts file" --menu "Chose one" 24 80 17 "${W[@]}" ) # show dialog and store output
clear
if [ $? -eq 0 ]; then # Exit with OK
ssh $FILE
fi