Portál AbcLinuxu, 7. května 2025 22:14
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.