O script Ed só funciona se digitado lentamente

3

Em este contexto , encontrei uma situação em que ed file < script imprimia ? e sair com erro 2, enquanto digita ou cola os comandos de script um de cada vez funcionou bem. Mesmo com um processo de shell, o arquivo passa por uma linha por vez, com um sleep entre funcionado corretamente. Então, parece-me que a minha versão de ed , que é a do MacOS 10.12, tem problemas se os comandos aparecem em horários inconvenientes.

  1. Por que o ed simplesmente não evita ler stdin até que esteja pronto para processar os comandos que receber? Ou estou interpretando mal a situação?

  2. A mensagem de erro ? não é muito útil. Em uma sessão interativa, eu poderia digitar h para receber uma mensagem de erro, de acordo com a página do manual. Mas com a entrada de um não-TTY sai imediatamente. Existe alguma maneira de obter a mensagem de erro neste caso também?

  3. Este é um problema conhecido? Em caso afirmativo, há alguma solução alternativa sugerida em vez de passar os comandos lentamente? Quais versões do ed seriam afetadas?

por MvG 08.12.2016 / 13:31

1 resposta

1

O problema pode ser causado por retornos de carro no script ed . Copiar e colar uma parte do texto não os transfere para o processo ed em execução, mas se eles estiverem em um arquivo de script, posso entender que ed ficou confuso.

O GNU ed sai com um status de saída de 2 "para indicar um corrompimento ou        arquivo de entrada inválido ", que suporta a especulação de que pode ser um arquivo de script formatado pelo DOS. No entanto, o padrão ed no macOS é BSD ed e os códigos de saída não estão adequadamente documentados no manual. ) source, parece que a maioria dos erros que causam este código de saída tem a ver com a leitura do arquivo de script.

Para remover o \r antes de cada nova linha (executará uma edição no local):

printf ',s/\r$//\nwq\n' | ed -s file

Os retornos de carro teriam chegado de ter escrito o script em um editor do Windows, por exemplo, ou em qualquer editor que salvasse o arquivo como um arquivo de texto formatado em DOS.

Pergunta 1: Tenho certeza que sim.

A pergunta 2 tem a ver com as mensagens concisas de diagnóstico que ed produz ( ? , na maior parte do tempo). Se você iniciar seu script de edição com uma chamada para a função H , qualquer erro será detalhado em vez do simples ? , como se você tivesse digitado h após um erro. Isso não ajudará se houver retornos de carro no final de cada linha, já que isso impediria que ed reconhecesse H como um comando válido.

Pergunta 3: Eu usei o GNU ed (1.14.2) e o BSD ed no OpenBSD, e eu não vi esse problema causado pela alimentação dos comandos ed "muito rapidamente".

    
por 07.10.2017 / 20:18