Come posso modificare i file crontab con Vim (ottengo l'errore: 'il file temporaneo deve essere modificato sul posto')


12

Come posso modificare i crontabfile in FreeBSD?

$ crontab -e
# ... I do my thing in vim & :wq

"crontab.9ZcXiFaawt" 6L, 203C written
crontab: temp file must be edited in place
Exit 1

L'uso EDITOR=nvifunziona bene ... Anche Linux sembra funzionare bene ...

Risposte:


19

Il problema è come Vim scrive i file. Per impostazione predefinita, crea una copia del file e sovrascrive quello originale.

Puoi osservarlo con:

# Show the file's inode
$ ls -i a
3156153 a

# Open file in Vim, :wq

# inode changed!
$ ls -i a
3155322 a

crontabviene confuso da questo (vedi :help crontab)

Devi usare :set backupcopyper yesfare in modo che Vim sovrascriva il file originale:

"yes"   make a copy of the file and overwrite the original one

Puoi farlo automaticamente per i file crontab con:

au FileType crontab setlocal bkc=yes

2

L'auto-risposta di Martin è corretta. Una variante, tuttavia, per le persone come me che cercano di limitare la compilazione del loro vimrcfile con eccezioni occasionali - qui la modifica di un crontab, è l'uso di modeline. Ciò consente di inserire le eccezioni direttamente nel file di destinazione.

Di seguito è la mia modeline crontab:

# vim: nu et tw=130 ts=8 sts=4 sw=4 ff=unix fo-=l fo+=tcroq2 bkc=yes

Il punto importante qui è quello bkc=yesche corrisponde alla vimrcconfigurazione di @ Martin . Il resto sono impostazioni di convenienza personale.

Detto questo per completezza e spunti di riflessione, la risposta iniziale di @ Martin è la più adeguata nella maggior parte dei casi.


1

Non è lo stesso errore ma si verifica anche abbastanza spesso:

Error detected while processing /root/.vimrc:
line    2:
E319: Sorry, the command is not available in this version: syntax enable
line    7:
...

Questo errore verrà visualizzato, se si utilizza viinvece di vimcrontab. Devi impostare l'editor di crontab aggiungendo il seguente codice nel tuo ~/.bashrcfile:

export EDITOR=vim

-1

Lo stesso accade su OSX. Dopo aver esaminato il problema, ho scoperto che funziona con plain vi, ma non funziona vim.

Quindi la correzione potrebbe essere:

EDITOR=vi crontab -e

Tuttavia, di visolito è collegato vim(ad esempio su OSX), quindi è la stessa cosa.


Questo può essere risolto dalla seguente riga nel file vimrc :

au BufNewFile,BufRead crontab.* set nobackup | set nowritebackup

Esiste un'altra soluzione alternativa aggiungendo le seguenti righe al file .vimrc :

if $VIM_NOBACKUP
  set nobackup
  set nowritebackup
endif

ed esegui il comando:

VIM_NOBACKUP=1 crontab -e

Puoi anche provare a definire la seguente variabile:

EDITOR='VIM_NOBACKUP=1 vim'

Fonte: crontab: il file temporaneo deve essere modificato in posizione


Il motivo per cui ciò sta accadendo ha a che fare con il modo vim/ vitratta i file di backup.


1
Dal momento che crontabdi solito solleva il valore di EDITORo VISUAL(se definito), è possibile impostare: EDITOR='VIM_NOBACKUP=1 vim'.
Muru,

@muru Ho provato, ma non credo che funzioni. crontab -egenera crontab: VIM_NOBACKUP=1 vim: No such file or directory.
Kenorb,

1
Deve essere una cosa OSX, perché funziona su Arch Linux e Ubuntu, bash e zsh.
muru,

2
Tutto il confondersi con le variabili d'ambiente mi sembra sciocco; Vim ha un modo di gestire le impostazioni specifiche del file e si chiama autocmds. Sembra che tu l'abbia appena copiato dal link, ma sembra che l'autore non abbia molta familiarità con Vim.
Martin Tournoij,

2
Perché includerlo affatto? È un modo stupido di fare le cose e non c'è quasi mai motivo di non usare un autocmd. Quando lo rimuoviamo, ci resta solo l'autocmd, che è la stessa risposta che è qui da oltre un mese e mezzo. Questa risposta non aggiunge altro che rumore.
Martin Tournoij,
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.