Podařilo se mi to
echo -n "command" > /dev/tty1
Objeví se písmena a kurzor se pohybuje, ale jsou to „duchové“ – pokud stisknete Enter , nic se nestane (nejsou ve standardním nastavení).
Upravit:
Uprostřed níže uvedeného snímku obrazovky vidíte, proč to vidím. (Řádek s červeným popiskem, přímo pod řádkem se žlutým popiskem.) Jak je tomu nyní, text poznámky ve skutečnosti „neupravujete“; jste pouze požádáni, abyste napsali nový text, který nahradí text poznámky, kterou (ve skutečnosti) upravujete. Myslel jsem si tedy, že by se to dalo napravit jednoduchým vložením starého textu do tty:pokud uživatel stiskne enter, žádná změna se neprovede. (Tento program je v Perlu/MySQL, ale myslel jsem si, že by bylo zajímavější zeptat se na obecné řešení než „jak to udělám v Perlu“.)
Edit 2:
Zde je kód Perl, který používá níže uvedený kód C (funguje přesně tak, jak bylo zamýšleno), a také nový snímek obrazovky – doufejme, že to objasní věci bez pochyb 🙂 Znovu se podívejte doprostřed snímku obrazovky, kde je provedena úprava text poznámky – tentokrát je tam starý text, například pokud jste chtěli opravit překlep, nebudete muset znovu psát celý text poznámky.
my $edit_note_text = $edit_note_data[2];
print BOLD, RED, " new text: ", RESET;
system("writevt /dev/tty "$edit_note_text"");
my $new_text = <$in>;
$new_text = fix_input($new_text);
my $set_text = "UPDATE notes SET note = "$new_text" WHERE id = $edit_note_id";
$db->do($set_text);
Přijatá odpověď:
Právě jsem našel malý program v C s názvem writevt
to dělá ten trik. Zdrojový kód stáhněte zde. Aby to bylo kompilované pomocí gcc
stačí nejprve odstranit následující řádky:
#include <lct/cline.h>
#include <lct/utils.h>
Aktualizovat . Příkaz je nyní součástí console-tools , tedy k dispozici v novějších systémech, pokud vaše distribuce nepoužívá kbd namísto nástrojů konzoly , v takovém případě jej můžete zkompilovat ze zdroje (mnohem novější verze, bez nutnosti úprav).
Použití:
sudo writevt /dev/ttyN command
Všimněte si, že z nějakého důvodu musíte použít 'r'
(nebo 'x0D'
) namísto 'n'
(nebo 'x0A'
), chcete-li poslat návratku.