Sziasztok,
Egy ideje használom egyszerűbb dolgokhoz az fzf parancsot, mint pl apt installhoz, vagy pont a remove-hoz hogy egy listát kiad, és kiválasztva enterrel eltávolítja, vagy épp telepíti. Viszont szeretnék egy olyan shell scriptet létrehozni, ahol megadott szövegek közül lehetne válogatni, és a kiválasztott esetén különböző parancsokat futtatna le. Ezt eddig egy olyan scripttel oldottam meg, ahol egy echo paranccsal kiírta, hogy pl:
1. NGINX
2. SAMBA
3. BACKUP
és utána case parannccsal megoldottam, hogy attól függően hogy milyen számot írtam be, annak megfelelően lefutott egy parancsok sorozata (jelen esetben ssh-s csatlakozás a megadott szerverre, esetleg előtte egy vpn-es csatlakozás.
Viszont ez tök jó lenne, ha fzf-el megtudnám valósítítani, hogy egy listából ugyanúgy fzf-el kurozorral kiválasztom melyik szerverről legyen szó (név alapján), és enter-el kiválasztva az ahhoz tartozó egyedi parancsokat futtatná le.
Erre van valamilyen mód fzf esetén?
Megoldás:
No csináltam egy megoldást. A sokadik keresésben találtam egy teljesen más fzf-es használatot. De a gondolkodásmódja viszont használhatónak tűnt, és azt felhasználva meg is tudtam oldani. A lényege, hogy létrehoztam egy file-t, amibe felsoroltam a menüpontokat és a hozzájuk tartozó parancsokat amit le kell futtatni a kiválasztáskor. Ezeket elválasztottam egy kettősponttal, tehát a kettőspont lett a delimiter. Például
BACKUP:ssh name@ip -p 8911 -i ~/.ssh/user
ICINGA:nmcli connection up userlaptop > /dev/null;ssh name@ip -i ~/.ssh/user;nmcli connection down userlaptop > /dev/null
REMOTE:ssh name@ip -i ~/.ssh/user
Aztán csináltam egy scriptet ami ezt tartalmazza:
#!/bin/bash
file="/path/server.txt"
selection1=$(cut -f1 -d ':' ${file} | fzf --prompt='Válassz szervert: ' --layout=reverse --no-multi)
selection2=$(grep $selection1 ${file} | cut -f2 -d ':')
eval "$selection2"
Definiáltam a file változóban ezt a szöveges filet, amiben az adatokat vannak. A selection változó tartalmazza azt a szerver nevet amit kiválasztottam az fzf menüjével. A selection 2 változó meg tartalmazza a kiválasztott szerverhez kapcsolódó parancsokat. Ezután parancsként értelmezem a selection2 függvény tartalmát. Lehetne bash -c -vel is futtatni, de így független a shelltől.