Erro ao procurar por uma string inexistente com EDITOR = vi crontab -e

2

Detalhes

SO: Solaris 10, atualização 11
HW: M5-32 LDOM, V490, IBM x3650, T5240, máquina virtual VMware, etc ...
EDITOR = vi
termo = vt100
diretório tmp = / var / tmp
shell cron = / sbin / sh
Meu shell = / bin / bash

Problema

Um erro muito interessante ocorre ao tentar modificar o crontab via crontab -e .

Se eu tentar procurar uma string inexistente utilizando crontab -e para verificar e verificar a sintaxe com o vi como meu editor e, em seguida, tentar salvar, ele voltará e informará que ocorreu um erro, mesmo que não haja alterações foram feitas.

Exemplo

admin@server# export EDITOR=vi
admin@server# crontab -e

No modo de comando, procure por uma string inexistente como "foobar123". Depois de receber o "Padrão não encontrado", tente :wq e você receberá ...

The editor indicates that an error occurred while you were
    editing the crontab data - usually a minor typing error.

    Edit again, to ensure crontab information is intact (y/n)?
    ('n' will discard edits.)

Se você for atrevido e optar por voltar imediatamente e tentar salvá-lo, o erro será salvo. Isso pode ser repetido em todos os tipos de Solaris, do VMware ao M5-32 LDOM, ao V490 físico. Curioso para saber porque o cron interpretaria uma busca por uma string inexistente como um erro, mas não diga visudo .

Uma nota relacionada é que o Solaris 11 não produzirá este erro, que então questiona se este é algum tipo de especificação POSIX porque ele se aplicaria ao Solaris 10 e não ao 11?

    
por Sending_Grounds 28.11.2016 / 19:31

2 respostas

1

Não tendo a fonte para o Solaris 10 ou o Solaris 11, não posso dizer com certeza, mas suspeito que Thomas Dickey está no caminho certo, com base em suas descobertas com o vim.

Eu localizei a fonte IllumOS onde procurar errcnt no diretório ex / vi mostra que errcnt é sempre incrementado, e errcnt é usado como o código de retorno de main () .

Assim, qualquer falha que aumente errcnt no vi irá "borbulhar" para o comando crontab, onde o IllumOS source for crontab indica que não estará satisfeito com nada além de zero.

Observe também o comentário em crontab.c!

311             ret = system(buf);
...
327             if ((ret) && (errno != EINTR)) {
328                 /*
329                  * Some editors (like 'vi') can return
330                  * a non-zero exit status even though
331                  * everything is okay. Need to check.
332                  */
    
por 30.11.2016 / 21:52
-1

SO: Solaris 10, atualização 11 HW: LDOM, máquina virtual VMware, etc ... EDITOR = vi termo = vt100

Minhas observações no comportamento de vi e crontab são semelhantes ao acima. Crontab -e dando o erro "O editor indica que ocorreu um erro enquanto você estava     editando os dados do crontab ..... "

e você não tem escolha senão editar de novo e de novo ... ou jogar fora as alterações. E usar o editor vi para fazer alterações em qualquer arquivo e tentar salvá-lo somente descartará as alterações. Eu acho que vi é o culpado pelo comportamento do crontab também. Agora tenho um script de wrapper para o vi forçar a saída com um status de saída zero para que o vi possa salvar as alterações nos arquivos editados. E eu redireciono o conteúdo do crontab para um arquivo e edito as alterações no arquivo e o redireciono de volta para o crontab. Um pouco doloroso e chato, mas funciona até chegarmos a solaris 11.NK

    
por 25.02.2017 / 16:29