cat / caminho / para / arquivo EOF dropa algum conteúdo em pasta, também corrige EOF também. Por quê?

2

De tempos em tempos, gosto de usar cat >/etc/configfile <<EOF thing e colar o conteúdo, depois enviar EOF para o arquivo. É bom com uma ou duas linhas, mas quando há mais delas, parte do conteúdo está faltando, algumas novas linhas extras são adicionadas e uma delas. O mesmo acontece se eu usar patch <<EOF , mesmo com um patch simples com menos de 2000 caracteres no total.

Eu suspeito que meu terminal (urxvt) faça algo errado, cole o conteúdo extremamente rápido, mas sinto falta de algo, quando eu uso o mintty do cygwin, é lento como o inferno, mas nem uma única linha é ignorada. Além disso, se eu inserir Vim e colá-lo lá, nada será perdido. O shell não importa, acontece em zsh, bash e ash.

    
por its_not_fun_to_be_devops 13.07.2013 / 20:11

1 resposta

2

Não consigo reproduzir o comportamento que você descreve. Seu emulador de terminal pode ter um limite no tamanho dos buffers de pasta, mas as novas linhas repetidas, se você realmente as tiver, soam como um bug.

Tem certeza de que está levando em conta o processamento do shell? Em um documento aqui delimitado com <<EOF , os caracteres $ e ' são interpretados pelo shell como o início de uma substituição de variável ou substituição de comando. Por exemplo, se sua seleção contiver

value=$PATH
more=$stuff stuff
hello='ls'

depois, colá-lo seguido por EOF resulta em um arquivo contendo algo como

value=/usr/local/bin:/usr/bin:/bin
more= stuff
hello=hello.txt
world.txt

Para evitar essas substituições, diga ao shell para interpretar literalmente o conteúdo do documento aqui, citando o marcador do documento aqui ( cat <<'EOF' ou cat <<\EOF ou cat <<"EOF" ou qualquer outra variação).

Verifique se você está colando a seleção desejada. X11 tem várias seleções ; aplicações antiquadas X11 onde a cópia é automática após a seleção, use a seleção PRIMARY, enquanto as aplicações X11 de estilo novo com um comando de cópia separado usam a seleção CLIPBOARD.

A solução para o seu problema não é colar, mas usar um programa como xclip ou xsel para copiar a seleção para um arquivo. Para a seleção PRINCIPAL:

xclip -o >/etc/configfile
xclip -o | patch
xsel >/etc/configfile
xsel | patch

Para a seleção CLIPBOARD, chame xclip -selection clipboard ou xsel -b .

    
por 14.07.2013 / 02:38