Що це за редактор, який відкривається crontab?


41

Я хочу редагувати crontab. Це повинен бути Vi, але це не так, як ви бачите:

root@euve252628:~# crontab -e

0

0 * * * * /var/www/vhosts/nevemind-what-webs/httpdocs/megacronstunde.php

?

:wq

?

Так, це дало мені ?. І чому це дає мені нуль?

Коли я набираю qкнопку a і натискаю Enter- вона закривається. Мені потрібно знати, як заощадити, бо це не класичний Vi.


5
Швидше за все ed: за замовчуванням він дає кількість символів (що, як правило, 888в системах на базі Debian, як правило, перший раз, оскільки це кількість символів у шаблоні "порожній" кронтаб). Якщо ви бачите кількість 0, ви повинні змінити це. Дивіться команду Crontab -e не працює належним чином
steeldriver

31
Ед, чоловіче! ! man ed: gnu.org/fun/jokes/ed-msg.html
juhist

6
@juhist Замість коментаря це повинно бути відповідь.
десерт

1
Хоча ви зазвичай хочете просто перекрити EDITORщось інше, якщо вас цікавить фактично використання редакції, це чудовий вступ: sanctum.geek.nz/arabesque/actually-using-ed
Xiong Chiamiov

@justme, до речі, ласкаво просимо до StackExchange! Якщо ви знайдете відповідь, яка найкраще відповідає на ваше запитання, ви можете прийняти її, натиснувши галочку біля неї.
JoL

Відповіді:


65

Ось так ed

За замовчуванням його підказкою є порожній рядок. Якщо ви хочете вийти, просто введіть q. Не використовуйте префікс :. Якщо ви зберегли зміни, він відповість на ?. Ви можете інтерпретувати це як "ви впевнені?", І підтвердити, qповторивши командування . До речі, будь-яка команда, яку вона не розуміє, також призведе до її відповіді ?. Це єдине повідомлення про помилку, яке він знає.

Його команда , що в'ється / VI / ех / СЄПН заснований на, так команди типу g/re/p, %s/vi/&m/g, 1,3d, /pattern/,$d, w, q, wqпрацює так само , як Vim.

Такі команди, як i, aі cпереходять у режим вставки. Щоб вийти з режиму вставки та повернутися до командного режиму, просто введіть рядок, що містить лише a .. Щоб "перейти" на інший рядок, просто введіть номер рядка, зміщення від поточного рядка, наприклад, +2або -1, або регулярний вираз як команду для переходу до цього рядка. .означає поточний рядок у командному режимі. Ви можете використовувати його, щоб знати, де ви знаходитесь. $означає останній рядок.

До речі, якщо ви хочете дізнатися більше про це, оскільки це програма GNU в Linux, більшість її документації є info edзамість man ed.

Ось приклад сеансу з доданими коментарями (не прийнято редакцією):

$ ed
i                    # insert (on current line)
vi
.                    # end insert
%s/vi/&m/g           # substitute vi for vim globally in all lines
i                    # insert (on current line)
first line
.                    # end insert
$a                   # append on last line
last line
.                    # end insert
%p                   # print all lines
first line
vim
last line
2                    # move to line 2 and print it
vim
/line                # move forward to line matching /line/ and print it
last line
-1                   # move 1 line backwards and print it
vim
?line                # move backward to line matching /line/ and print it
first line
+1                   # move 1 line forward and print it
vim
g/line/p             # print lines matching /line/ (grep)
first line
last line
p                    # print (current line)
last line
.                    # move to current line and print it
last line
c                    # change (current line)
final line
.                    # end insert
%p                   # print all lines
first line
vim
final line
/vim/,$c             # change from line matching /vim/ to last line
that's all
.                    # end insert
%p                   # print all lines
first line
that's all
wq                   # write and quit
?                    # write what?
h                    # help with last error message
No current filename
wq                   # write and quit to check error message
?
H                    # help with all error messages
No current filename
wq                   # write and quit to check error message
?
No current filename
wq file.txt          # write file.txt and quit
22                   # wrote 22 bytes

РЕДАКТУВАННЯ: Як і згадки про гравійність, більш корисні повідомлення про помилки можна активувати за допомогою hабо H. Крім того, ,замість %діапазону частина команди є офіційним способом посилання на "всі рядки" в ed. У GNU edможливість використання %для цього підтримується, але не зазначена в infoпосібнику. Використання %для всіх ліній, очевидно, винайдено компанією ex, здавалося б, тому, що це ,означає, .,.а не 1,$як в ed.

EDIT2: Налаштування іншого редактора

Як і інші згадані відповіді, якщо ви хочете вказати інший редактор, ви можете зробити це, встановивши змінні середовища EDITORабо VISUALсередовища. Різниця між ними пояснюється у цій відповіді .

Це можна зробити так, якщо ви хочете встановити його для однієї команди:

EDITOR=vi crontab -e

або так, якщо ви хочете, щоб усі програми, запущені в сесії оболонки, використовували його:

export EDITOR=vi
crontab -e

Ви можете зберегти exportв, ~/.profileабо /etc/profile, залежно від того, якщо ви хочете, щоб це був користувальницький або системний параметр для bash відповідно. Це портативний спосіб встановити редактор Unix; це можна зробити в будь-якому розповсюдженні.

В Ubuntu також є update-alternativesкоманда. Поточний редактор за замовчуванням можна побачити за допомогою update-alternatives --display editor, і ви можете використовувати його update-alternatives --config editorдля встановлення:

$ sudo update-alternatives --config editor
There are 4 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /bin/nano            40        auto mode
  1            /bin/ed             -100       manual mode
  2            /bin/nano            40        manual mode
  3            /usr/bin/vim.basic   30        manual mode
  4            /usr/bin/vim.tiny    10        manual mode

Press enter to keep the current choice[*], or type selection number: 3
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in manual mode.

2
Сучасні версії знають англійські повідомлення про помилки, їх просто потрібно hзапитувати (або Hпостійно ввімкнути).
grawity

2
(Крім того , як %видається, є колишній винахід офіційно. Е вид використання ,означає все рядки, хоча деякі версії працюють %так само.)
grawity

Це правильно, але слід також згадати змінні EDITORта VISUALсередовище.
chrylis -на страйк-

Більшість команд у програмі edтакі ж, як у vi, за винятком того, що вам не доведеться спочатку натискати ":", щоб вийти з режиму графічного редагування. Я дізнався Unix, коли "справжні програмісти" не витрачали час на використання графічних інтерфейсів - термінал "зеленого екрану" розміром 80x25 працює майже так само добре, як і пробивка картки IBM 029 для редагування, але не зовсім;)
alephzero

@chrylis EDITORі VISUALнасправді не так актуально. Питання було в основному: що це за редактор і як ним користуватися? (що це таке 0і що ?, і як я заощаджую?).
JoL

39

Як дізнатися, що це за редактор

Натисніть Ctrl+ Z. Це призупиняє редактор і надає вам підказку оболонки. У запиті запустіть, psщоб побачити, які процеси працюють у цьому терміналі.

bash-4.3$ crontab -e
1077
^Z
[1]+  Stopped                 crontab -e
bash-4.3$ ps
  PID TTY          TIME CMD
26295 pts/10   00:00:00 bash
26297 pts/10   00:00:00 crontab
26298 pts/10   00:00:00 sh
26299 pts/10   00:00:00 ed
26302 pts/10   00:00:00 ps

bashОригінальна оболонка, crontabяк очікується, sh- це інша оболонка, до якої, мабуть, був викликаний crontab, і psє запущеною psкомандою. Це листя ed(надається однойменним пакетом ).

Якщо ви не можете зрозуміти, як вийти з редактора, можете вбити його в цей момент за допомогою kill 26302або kill %1.

Що таке редакція?

Ед - стародавній редактор, що датується раніше, ніж монітори були (звичайною справою). Він був розроблений для комп'ютерів, інтерактивна периферійна частина яких була телепринтером .

Він 0відображається на початку - це кількість рядків у файлі. Очевидно, що це важлива інформація.

?означає, що Ед не зрозумів, що ви ввели. Лінійні принтери повільні, тому редактор не витрачає час і чорнило, щоб відображати безглузду інформацію, наприклад повідомлення про помилки. Стара жарт (я не знаю походження) йде:

У Кен Томпсона є автомобіль, який він допоміг розробити. На відміну від більшості автомобілів, він не має ні спідометра, ні газового датчика, ні будь-якого з інших численних ідіотських вогнів, які блякають сучасного водія. Скоріше, якщо водій робить помилку, у центрі приладової панелі загоряється гігантський “?”. «Досвідчений водій, - каже Томпсон, - зазвичай знатиме, що не так».

Якщо ви відчуваєте себе недосвідченим, ви можете видати команду H(всі команди, окрім однієї, є однією буквою (не враховуючи аргументи даних), тому що кому подобається вводити текст), і ви отримаєте повідомлення про помилки. Наприклад, якщо просто натиснути Enter

?
H
Invalid address

Ясно, чи не так? (Порожній рядок - це порожня команда - та, яка не є однією буквою. Порожня команда переходить до наступного рядка і друкує її. Якщо ви знаходитесь в кінці файлу, що завжди є в порожньому файл, наступного рядка немає, тому адреса, на яку ви просили перейти, недійсна.)

Як отримати іншого редактора

crontabКоманда, як і більшість команд , які працюють в текстовому редакторі, перевірте змінні середовища VISUALі EDITOR(в такому порядку) , щоб вирішити , яку програму потрібно запускати, падаючи спиною до системи по замовчуванню. Якщо будь-яка з цих змінних встановлена ed, змініть її або видаліть.

У Ubuntu (і Debian та інших) є системним редактором за замовчуванням /etc/alternatives/editor, яким керують через механізм альтернатив . За замовчуванням він вибирає "кращий" встановлений редактор, де "кращий" визначається пріоритетами, встановленими менеджерами пакету. Використовуйте update-alternativesдля налаштування альтернативи. Ви можете відображати доступні редактори та їх пріоритети за допомогою

update-alternatives --display editor

edмає пріоритет -100, тоді як усі інші «розумні» редактори мають позитивний пріоритет, тому єдиний спосіб, яким він би використовувався за замовчуванням, - це якщо не було встановлено жодного редактора. Установка Ubuntu за замовчуванням використовує nano в якості редактора за замовчуванням, з пріоритетом 400. Якщо альтернатива була встановлена ed, ви можете змінити її за допомогою

sudo update-alternatives --config editor

Gilles, чи не повинен Ubuntu (і Debian та інших) редактор за замовчуванням системи / etc / alternative / редактор перефразовується до On Ubuntu (і Debian та інших), системним редактором за замовчуванням є / usr / bin / editor ?
heemayl

досить вичерпний (за винятком того, що він не згадує змінну EDITOR env? але, можливо, спеціально, щоб люди використовували правильний спосіб встановити його в системі через оновлення-альтернативи). Можливо, все ж зміниться: psз pstree -sap $$ ? (простіше розібратися, який редактор був запущений, як зараз у форматі дерева)
Олів'є Дулак,

@heemayl /usr/bin/editorє символьним посиланням на /etc/alternatives/editor. Те, що дзвінки програм /usr/bin/editor- це деталь, яку я пропустив.
Жил 'ТАК - перестань бути злим'

3
@OlivierDulac я згадую EDITORі VISUAL. Насправді вони є правильним способом вибору редактора, оскільки це налаштування користувача, а не загальна система. Я вважаю за краще дотримуватися psтут, щоб все було просто.
Жил "ТАК - перестань бути злим"

1
"... комп'ютери, інтерактивний периферійний вихід яких був лінійним принтером." Лінійний принтер не був інтерактивним пристроєм - це порівняно швидкий (і дорогий) пристрій для отримання великої кількості друкованої продукції. Ви маєте на увазі "друкарський термінал з клавіатурою", як телетип (який також може працювати як пристрій вводу / виводу перфорованої паперової стрічки) або друкарська машинка IBM "гольфбол".
алефзеро

12

З вашого запитання здається, що у вашому EDITOR за замовчуванням немає vim, і у вас є проблеми з поточним редактором за замовчуванням.

Команда, що наведена нижче, встановить типом EDITOR vim

export EDITOR=vim

Після встановлення редактора за замовчуванням таким vim, що працює, запуск crontab -eбуде використовуватися vimяк ваш редактор.

Примітки:

  1. Якщо ви віддаєте перевагу, ви можете вибрати інший редактор як редактор за замовчуванням
  2. Якщо ви хочете встановити редактор за замовчуванням для vimпостійна, ви повинні додати команду для вашого ~/.bashrcабо ~/.profileабо аналогічного файлу.

4

Для редагування VI для редагування crontab скористайтесь командою нижче.

EDITOR="vi" crontab -e

або, якщо ви хочете редагувати з іншим редактором, таким як gedit, nano тощо, просто замініть vi на ім'я редактора.


Понад мільйон! За допомогою crontab EDITOR = "vi" -e це працює.
justme

3
@gronostaj Це не те саме, що будь-яка інша відповідь, яка була розміщена тут. Встановлення змінної середовища для одного запуску однієї команди не те саме, що експортувати її для всіх наступних команд, запущених з поточного екземпляра оболонки. Ця відповідь корисна для постійної зміни налаштувань, але для керування редактором за раз, це правильна відповідь.
Елія Каган

3
Дійсно, знати, як додавати змінні середовища в командному рядку дуже важливо, так як постійно змінювати змінну може бути небажаним. Однією з найтонших переваг оболонок * nix є можливість зробити це так легко.
Monty Harder
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.