GNU/Linux >> Znalost Linux >  >> Linux

Vytvořit příkaz vložením řetězce do Tty?

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.


Linux
  1. 4 způsoby, jak vytvořit textový soubor v terminálu Linux

  2. Odstraňte výskyty řetězce v textovém souboru

  3. Převeďte řetězec na hexadecimální na příkazovém řádku

  1. Jak používat příkaz Grep k vyhledání textu v souborech

  2. Jak upravit textový soubor v mém terminálu

  3. Linuxový příkaz pro opakování řetězce nkrát

  1. Manipulace s textem na příkazovém řádku pomocí sed

  2. Jak napsat text na obrázek pomocí příkazu Linux

  3. Příkaz pro tisk pouze posledních 3 znaků řetězce?