Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem míchá se vstupní a vystupní text

Mám as 7000b vstupního base64 textu po výstupu je to utf-8text český 105 lajn,600 slov,4357 znaků(wc)

Chci ale vysvětlit,proč po zadání v terminálu (base64 -d enter vložit enter ctrld)
Je promixovaný vstup a výstup
V jednom terminálu na úrovni řádků (asi 4 řezy :vstup,výstup,vstup,výstup)a v druhém jen na pár místech, pár řádků má před sebou base64text (třeba do délky půlky řádku)

Proč to není oddělené,proč to není deterministické a proč na jiné platfotmě je malformace jiná?

Vstup je ok,base64 nehlásí žádnou chybu, režim řádků na outuputu je vždy cr+lf

Předmět Autor Datum
Terminal kde? Treba krome textu jsou tam nejake ridici znaky.
Jan Fiala 07.05.2023 10:26
Jan Fiala
Terminál v linuxu a androidu. Shell je bash a sh. Říď.znaky ram nejsou, jde o psaný. Text
jamaron 07.05.2023 11:34
jamaron
Chcelo by to byť konkrétnejší, konkrétne b64 dáta, v akom termináli sa to takto správa? Správa sa to…
pozorovateľ 08.05.2023 09:56
pozorovateľ
Zvláštní že při příkazu cat|base64 -d se vynoří uplně jiné chování: Na jedné platformě se NIC nezměn…
jamaron 08.05.2023 07:47
jamaron
prostě se ti začnou kromě bufferů od base64 a terminálu motat i buffery od toho cat
gilhad 09.05.2023 02:01
gilhad
Jestli chápu popis, tak ti jde o to, že máš program, který čte standadní vstup a vypisuje to na stan…
gilhad 09.05.2023 01:59
gilhad
Hmm a nejde tato nepříjemnost odstínit? Opravdu nechci tvořit (i dočasné) soubory. Jak*mi všemi met…
jamaron 09.05.2023 16:35
jamaron
Proč máš problém s dočasnými soubory ??? Ona ta "|" může být ve skutečnosti přes dočasný soubor ...
dsa 09.05.2023 18:18
dsa
Otázka je, proč to takhle chceš, co si od toho slibuješ, proč ty soubory nevyhovují? Ale samozřejmě…
gilhad 09.05.2023 21:57
gilhad
Ano tak to je: nezajímavý text,který ruší .A kdo zvás to má, rozumět on-the fly base64 textu? Díky… poslední
jamaron 10.05.2023 10:29
jamaron

Zvláštní že při příkazu cat|base64 -d se vynoří uplně jiné chování:
Na jedné platformě se NIC nezmění,na druhé problém kompletně vymizí (tj po příkazu se zobrazí nejdřív zakodovaný tdxt vložený zschránky a poté drkódovaný)

Myslím že se tam děje něco pod povrchem,objasníte co?

Jestli chápu popis, tak ti jde o to, že máš program, který čte standadní vstup a vypisuje to na standardní výstup.
Ty tam pastneš blok textu, ono ho to hned začne číst a zpracovávat a vypisovat dřív, než se terminál popasuje s tím pastnutým vstupem, který tam ještě hrne, takže ve výsledku to máš na obrazovce promíchané.

takže pokud by sis ten vstup například pastnul do nějakého souboru (jménem x.txt) a pak tam přesměroval ten soubor
base64 -d <x.txt
tak by ti vyjel celý výstup, jak si ho představuješ, nerušený vstupními řádky

Naopak, pokud by sis přesměroval výstup do souboru
base64 -d >y.txt
a pastnul tam ten vstup, tak bys viděl celý vstup pěkně pastnutý a žádný výstup (ten by byl celý v tom y.txt)

A co se toho promíchávání týče, tak je to tak nějak dané jednak konkrétním programem, jednak velikostí vstupních a výstupních bufferů, taky typem terminálu a rychlostí zpracování a samozřejmě to můžou ovlivnit i procesy běžící na pozadí.

Ony obecně tyhle filtry nečekají na ukončení vstupu, ale začnou zpracovávat to, co dostanou, když to dostanou a sypat ven co mají, když to mají a když si na jednom terminálu mícháš jak vstup, tak výstup, tak to pochopitelně je často nějak promíchané.

Hmm a nejde tato nepříjemnost odstínit? Opravdu nechci tvořit (i dočasné) soubory.

Jak*mi všemi metodami?
Base64-d <<<

Echo "ctrl+v" |base64-d

Která je nejsprávnější

While read justcaptured ... ; base64-d <(echo $justcsptured)

Ten "program" je(cat|)base64 -di tečk.

Otázka je, proč to takhle chceš, co si od toho slibuješ, proč ty soubory nevyhovují?

Ale samozřejmě se to dá řešit i různými jinými způsoby.
Například si otevřeš jeden terminál a spustíš tam program tty, který ti řekne na jakém tty byl spuštěný

$ tty
/dev/pts/8
$

otevřeš si druhý terminál, kde spustíš ten program a jeho výstup přesměruješ na ten první terminál a na jeho vstup pak vesele pastneš všechna potřebná data a nebudeš si lámat hlavu s tím, že nevidíš nic zajímavého

$ base64 -di >/dev/pts/8
TkFNRQogICAgICAgYmFzZTY0IC0gYmFzZTY0IGVuY29kZS9kZWNvZGUgZGF0YSBhbmQgcHJpbnQg
dG8gc3RhbmRhcmQgb3V0cHV0CgpTWU5PUFNJUwogICAgICAgYmFzZTY0IFtPUFRJT05dLi4uIFtG
SUxFXQoKREVTQ1JJUFRJT04KICAgICAgIEJhc2U2NCBlbmNvZGUgb3IgZGVjb2RlIEZJTEUsIG9y
IHN0YW5kYXJkIGlucHV0LCB0byBzdGFuZGFyZCBvdXRwdXQuCgogICAgICAgV2l0aCBubyBGSUxF
LCBvciB3aGVuIEZJTEUgaXMgLSwgcmVhZCBzdGFuZGFyZCBpbnB1dC4KCiAgICAgICBNYW5kYXRv
cnkgYXJndW1lbnRzIHRvIGxvbmcgb3B0aW9ucyBhcmUgbWFuZGF0b3J5IGZvciBzaG9ydCBvcHRp
b25zIHRvby4KCg==
^D
$

A pak se podíváš na ten první terminál a on tam bude ten výsledek

$ tty
/dev/pts/8
$ NAME
base64 - base64 encode/decode data and print to standard output

SYNOPSIS
base64 [OPTION]... [FILE]

DESCRIPTION
Base64 encode or decode FILE, or standard input, to standard output.

With no FILE, or when FILE is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.

Zpět do poradny Odpovědět na původní otázku Nahoru