ตารางงานกับเอ็ดโดยคำสั่งของบสายข้อมูล,ส่งผลให้เกิด"ไม่ได้ทำการแก้ไขให้"

0

คำถาม

ฉันกำลังพยายามต่อไปยังท้ายบรรทัดของตารางงานแฟ้ม ฉันรู้ว่ามันมีทางอื่นที่จะทำงานอยู่ปัญหานี้แต่ยังคงต้องการที่จะรู้ว่าอะไรคือสาเหตุมัน คำสั่งก็คือวิ่งเข้าไปใน raspberry pi 3 B+,raspbian ย่อแค่ได้ถูกติดตั้งด้ว GNU เอ็ด 1.15,ตารางงานของ 3.0pl1-134+deb10u1.

คำสั่งที่ผมติดอยู่บนนี้คือ:

$ echo -e 'a\n#asdf\n.\nwQ' | EDITOR=ed crontab -e
902
909
No modification made

ฉันคิดว่ามันจะเพิ่มเส้น #asdf ในตอนจบของของฉันตารางงานแฟ้มแต่มันไม่ช่วยเลย

การตั้งค่า EDITOR='tee -a' เป็นแนะนำอยู่ https://stackoverflow.com/a/30123606/8842387 มันไม่ช่วยแก้ปัญหาใดๆหรอกครับ ดังนั้นฉันคิดว่ามันเป็นปัญหากับตารางงานของ.

ที่จริงมันเพียงพอตอนที่ฉันให้เอ็ดคำสั่งของจากแป้นพิมพ์โดยตรงมากกว่าสตรีมมิ่งมันมันแค่ทำงาน บางที subshell การสร้างสาเหตุของปัญหาหรอ?

นี่ฉัน attaching ไม่กี่แห่งสุดท้ายจากบรรทัด strace ผลลัพธ์.

$ echo -e 'a\n#asdf\n.\nwQ' | EDITOR=ed strace crontab -e
execve("/usr/bin/crontab", ["crontab", "-e"], 0x7ee54c14 /* 29 vars */) = 0
access("/etc/suid-debug", F_OK)         = -1 ENOENT (No such file or directory)
...
read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\0\7\0\0\0\0"..., 4096) = 659
_llseek(3, -393, [266], SEEK_CUR)       = 0
read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\0\7\0\0\0\0"..., 4096) = 393
close(3)                                = 0
getpid()                                = 18579
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 3
connect(3, {sa_family=AF_UNIX, sun_path="/dev/log"}, 110) = 0
send(3, "<78>Nov 20 15:31:25 crontab[1857"..., 56, MSG_NOSIGNAL) = 56
openat(AT_FDCWD, "crontabs/pi", O_RDONLY) = -1 EACCES (Permission denied)
openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 4
fstat64(4, {st_mode=S_IFREG|0644, st_size=2995, ...}) = 0
read(4, "# Locale name alias data base.\n#"..., 4096) = 2995
read(4, "", 4096)                       = 0
close(4)                                = 0
openat(AT_FDCWD, "/usr/share/locale/en_GB.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en_GB.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en_GB/LC_MESSAGES/libc.mo", O_RDONLY) = 4
fstat64(4, {st_mode=S_IFREG|0644, st_size=1433, ...}) = 0
mmap2(NULL, 1433, PROT_READ, MAP_PRIVATE, 4, 0) = 0x76f50000
close(4)                                = 0
openat(AT_FDCWD, "/usr/share/locale/en.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
write(2, "crontabs/pi/: fdopen: Permission"..., 39crontabs/pi/: fdopen: Permission denied) = 39
exit_group(1)                           = ?
+++ exited with 1 +++

openat(AT_FDCWD, "crontabs/pi", O_RDONLY) = -1 EACCES (Permission denied) ดูเป็นที่น่าสงสัยแต่ไม่แน่ใจว่าทำไมมันเปิดแฟ้มอ่านอย่างเดียว

แก้ไข: ที่แนะนำโดย@tink ฉันวิ่ง EDITOR=ed strace crontab -e เพื่อเห็นอะไร strace ทำให้การแบบโต้ตอนเริ่มต้นขึ้นแล้ว ผลนเกือบเดียวกัน(เดียวที่ varying บเลขโพรเซสและ fd ตัวเลข).

ฉันสังเกตเห็นมันวิ่งหนี echo "..." | EDITOR=ed crontab -e ออกจากกับข้อความ No modification made แต่ด้วย strace โพรเซส halts นโดยที่ไม่มีข้อความ (EDITOR=ed strace crontab -e 2>&1 | grep "No mod" รอยนิ้วมือไม่มีอะไร). เดาว่าคงเป็น strace ให้แตกต่างเกิดข้อผิดพลาด.

bash cron ed linux
2021-11-20 06:41:51
1

คำตอบที่ดีที่สุด

0

ลังตามเรื่องของฉันมองเห็นความคิดเห็นพวกนี้ทำงานสำหรับฉัน:

( unset VISUAL; printf '%s\n' a '#abcd' . wq | EDITOR=ed crontab -e )
printf '%s\n' a '#abcd' . wq | VISUAL=ed crontab -e

อยู่ในสภาพแวดล้อมทั้งสองรางและเครื่องมือแก้ไขกำหนดจะ"vim"

หรือมากก roundabout แต่ไม่จำเป็นต้องลิงกับซอง vars. เรื่องนี้ยังจะอนุญาตให้คุณทำมันเงียบ:

crontab <(printf '%s\n' a '#asdf' . '%p' | ed -s <(crontab -l))

ฉันกำลังทำอยู่เหนือขึ้นแม็ค. บนระบบลินุกซ์,ฉันสามารถ reproduce การสังเกตของนายแต่ไม่สามารถอธิบายเรื่องพวกเขา

เล็กๆ tweak ต้องสุดท้ายคำสั่งทำงาน:

printf '%s\n' a '#asdf' . '%p' Q | ed -s <(crontab -l) | crontab -
2021-11-21 20:34:51

ขอบคุณสำหรับคำตอบ! ฉันกลัวที่จะพูดแบบนั้นก็เหมือนกันของอยู่เหนือสองบรรทัดทำงานสำหรับผมและคนสุดท้ายที่ทำให้ /dev/fd/63: Not a regular file. บางทีอาจจะปรับแต่งระบบถูกเปลี่ยนไปเหรอ?
bivoje

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................