Portál AbcLinuxu, 4. prosince 2025 20:23
Mám soubor menu.sh a po spuštění se mi zobrazí nějaká nabídka která dle výběru provede tohle echo "cat /var/log/system.log"; Jenže já bych potřeboval aby se cely script v souboru menu.sh ukoncil a zustal v CL jen tento prikaz který když kliknu enter spustim. cat /var/log/system.log Poradí někdo?
Řešení dotazu:
Jde to pomocí TIOCSTI ioctl.
Ale ať už se snažíte o cokoli, jsem si téměř jistý, že tohle není vhodný způsob, jak to řešit.
A co je smyslem? Aby si uživatel mohl ten příkaz doupravit a pak ho teprve odentrovat?Přesně tak, upravím příkaz a odentruju..
Pokud nestačí BASH (např. jeho Ctrl+R – spouštění příkazů z historie)CTRL+R není taky žádné vítězství :(
tak si asi budeš muset udělat nějaký svůj shell (místo toho menu.sh), ve kterém vybereš z nabídky, upravíš a spustíšNo ale jak? Na to se ptám od začátku ;)
read -p "> " -e -i "echo aaa" cmd eval "$cmd"
#!/bin/bash
clear
read -p "> " -e -i "echo /etc/init.d/apache2 restart" cmd
eval "$cmd"
Výsledek
root@srv:/# sh menu.sh
read: 3: Illegal option -e
root@srv:/#
Díky
_menu_driven_command() {
local cur="${COMP_WORDS[COMP_CWORD]}"
local first=${COMP_WORDS[1]}
local clist="cat tail"
if [[ $COMP_CWORD -eq 1 ]]; then
COMPREPLY=($(compgen -W "$clist" -- "$cur"))
else
case "$first" in
cat)
COMPREPLY="$(kdialog --inputbox "Choose file" "/var/log/messages")"
;;
tail)
COMPREPLY="$(kdialog --inputbox "Choose file" "/var/log/messages")"
;;
esac
fi
}
complete -F _menu_driven_command mdc
mdc() {
eval $@
}
Použití:
bash$ mdc <TAB> bash$ mdc cat tail [ash@ashnb /dev/pts/7 (2) 10:53 ~] bash$ mdc tail <TAB> ...následuje GUI dialog... bash$ mdc tail /var/log/messagesPoužitý
kdialog by bylo potřeba nahradit nějakým sotisfikovanějším menu dle vašich potřeb, podstatné je, aby na stdout vrátilo výsledný řetězec parametrů, což asi nebude problém.
alias, případně upravit .inputrc?
Také by se ta nabídka mohla generovat utilitou find, která by rovnou nabídla vhodné soubory.
cl_copy () {
CTRL + C = "/etc/init.d/apache2 restart"
}
Je to možný? Díky
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.