ฉันจะแก้ไขcrontab
ไฟล์ใน 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
ใช้EDITOR=nvi
งานได้ดี ... Linux ดูเหมือนว่าจะทำงานได้ดี ...
ฉันจะแก้ไขcrontab
ไฟล์ใน 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
ใช้EDITOR=nvi
งานได้ดี ... Linux ดูเหมือนว่าจะทำงานได้ดี ...
คำตอบ:
ปัญหาคือวิธีที่ Vim เขียนไฟล์ โดยค่าเริ่มต้นมันจะทำสำเนาของไฟล์และเขียนทับไฟล์ต้นฉบับ
คุณสามารถสังเกตสิ่งนี้ด้วย:
# Show the file's inode
$ ls -i a
3156153 a
# Open file in Vim, :wq
# inode changed!
$ ls -i a
3155322 a
crontab
สับสนโดยสิ่งนี้ (ดู:help crontab
)
คุณต้องใช้:set backupcopy
เพื่อyes
ทำให้ Vim เขียนทับไฟล์ต้นฉบับ:
"yes" make a copy of the file and overwrite the original one
คุณสามารถทำได้โดยอัตโนมัติสำหรับไฟล์ crontab ด้วย:
au FileType crontab setlocal bkc=yes
@ Martin ตอบเองถูกต้อง อย่างไรก็ตามรูปแบบสำหรับคนอย่างฉันที่พยายาม จำกัด การเติมvimrc
ไฟล์ด้วยข้อยกเว้นเป็นครั้งคราว - นี่คือการแก้ไข crontab คือใช้ modelines สิ่งนี้อนุญาตให้วางข้อยกเว้นโดยตรงในไฟล์เป้าหมาย
ด้านล่างเป็นโมเดล crontab ของฉัน:
# vim: nu et tw=130 ts=8 sts=4 sw=4 ff=unix fo-=l fo+=tcroq2 bkc=yes
บิตสำคัญที่นี่คือสิ่งbkc=yes
ที่ตรงกับการvimrc
กำหนดค่าของ @ Martin ส่วนที่เหลือเป็นการตั้งค่าความสะดวกสบายส่วนบุคคล
นี่เป็นการพูดเพื่อความสมบูรณ์และอาหารสำหรับความคิดคำตอบเบื้องต้นของ @ Martin นั้นเพียงพอที่สุดในกรณีส่วนใหญ่
ไม่ใช่ข้อผิดพลาดเดียวกัน แต่เกิดขึ้นค่อนข้างบ่อย:
Error detected while processing /root/.vimrc:
line 2:
E319: Sorry, the command is not available in this version: syntax enable
line 7:
...
ข้อผิดพลาดนี้จะปรากฏขึ้นหากคุณใช้vi
แทนvim
crontab คุณต้องตั้งค่าเครื่องมือแก้ไขของ crontab โดยเพิ่มรหัสต่อไปนี้ใน~/.bashrc
ไฟล์ของคุณ:
export EDITOR=vim
สิ่งเดียวกันนี้เกิดขึ้นบน OSX หลังจากตรวจสอบปัญหาฉันพบว่าใช้งานได้กับธรรมดาvi
แต่ไม่สามารถใช้งานvim
ได้
ดังนั้นการแก้ไขอาจเป็น:
EDITOR=vi crontab -e
อย่างไรก็ตามvi
มักจะเชื่อมโยงกับvim
(เช่นบน OSX) ดังนั้นมันจึงเป็นสิ่งเดียวกัน
สิ่งนี้สามารถแก้ไขได้โดยบรรทัดต่อไปนี้ในไฟล์vimrcของคุณ:
au BufNewFile,BufRead crontab.* set nobackup | set nowritebackup
มีวิธีแก้ไขอื่นสำหรับสิ่งนี้โดยเพิ่มบรรทัดต่อไปนี้ในไฟล์. vimrc :
if $VIM_NOBACKUP
set nobackup
set nowritebackup
endif
และเรียกใช้คำสั่ง:
VIM_NOBACKUP=1 crontab -e
คุณอาจลองกำหนดตัวแปรต่อไปนี้:
EDITOR='VIM_NOBACKUP=1 vim'
ที่มา: ไฟล์ crontab: temp จะต้องแก้ไขให้ถูกต้อง
เหตุผลที่สิ่งนี้เกิดขึ้นเกี่ยวข้องกับวิธีvim
/ vi
ปฏิบัติกับไฟล์สำรอง
crontab -e
crontab: VIM_NOBACKUP=1 vim: No such file or directory
crontab
มักจะยกค่าของEDITOR
หรือVISUAL
(ถ้ามันถูกกำหนดไว้)EDITOR='VIM_NOBACKUP=1 vim'
คุณสามารถตั้งค่าให้: