Digitare un EOF senza un'interruzione di riga


1

Ho un piccolo comando che uso per copiare / incollare i file che coinvolge incollare l'archivio tar con codifica base64 in stdin, ma l'utilità base64 continua a darmi un messaggio di errore sul mio input perché devo digitare un'interruzione di riga prima di emettere un EOF per interrompere l'ingresso.

per esempio:

[root@box ~]echo hello | base64
aGVsbG8K
[root@box ~]base64 -d
aGVsbG8K[enter][ctrl+d]
hello
base64: invalid input

Al contrario del clunkier:

[root@box ~]echo -n 'aGVsbG8K' | base64 -d
hello

Il che non funziona davvero bene nel contesto del comando che ho scritto.

Quindi c'è un modo per inserire un EOF senza quella interruzione di riga in più? Voglio dire, questo ancora tecnicamente funziona , ma non voglio che gli errori indicati quando non v'è un errore effettivo, e io non voglio sopprimere stderr nel caso in cui non v'è un errore vero e proprio.


4
Perché devi premere Enterprima Ctrl-D? Nel mio test ha funzionato premendo Ctrl-Ddue volte.
Daniel Beck

Puoi anche usarebase64 -d <<< aGVsbG8K
choroba il

@DanielBeck Mi sento così stupido di non saperlo.
Sammitch,

@choroba Ho ancora ricevuto 'input non validi' da questo
Sammitch

Quale sistema operativo, quale base64 --version?
Choroba,

Risposte:


0

Penso che dovresti trovare base64un'utilità diversa , come la versione GNU, che tollera i caratteri di nuova riga.

In caso contrario, supponendo che l'input sia esattamente lungo una riga (poiché altrimenti avrebbe una nuova riga illegale in essa), è possibile effettuare le seguenti operazioni:

echo -n "$(head -n1)" | base64 -d

o se non ti piace echo -n(anche se sembra funzionare sul tuo sistema, non è garantito):

printf %s "$(head -n1)" | base64 -d

Vi è una certa ambiguità sul fatto che i newline siano legali nella codifica base64; la RFC pertinente afferma che sono legali solo se l'applicazione che utilizza la codifica base64 è documentata come consentendole. Non è di grande aiuto per un codec base64 generico.

Ma AFAIK, praticamente tutte le applicazioni che usano base64 consentono esplicitamente le nuove linee (e alcune le richiedono impostando una lunghezza massima della linea), quindi mi sembra strano che l' base64utilità non abbia un meccanismo per permetterle.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.