Что это за редактор, который открывается crontab?

Я хочу отредактировать crontab. Предполагается, что это Vi, но это не так, как вы можете видеть:

root@euve252628:~# crontab -e 0 0 * * * * /var/www/vhosts/nevemind-what-webs/httpdocs/megacronstunde.php ? :wq ?

Да, это дало мне ?. И почему это дает мне ноль?

Когда я набираю q и нажимаю Enter - он завершает работу. Мне нужно знать, как сэкономить, потому что это не классический Vi.

40
задан 14 September 2017 в 02:02

8 ответов

С вашего вопроса кажется, что ваш EDITOR по умолчанию не является vim, и у вас проблемы с текущим редактором по умолчанию.

В приведенной ниже команде EDITOR по умолчанию будет vim

export EDITOR=vim

После установки редактора по умолчанию vim, запуск crontab -e будет использовать vim в качестве вашего редактора.

Примечания:

Если вы предпочитаете, вы можете выбрать другой EDITOR в качестве редактора по умолчанию. Если вы хотите окончательно установить редактор по умолчанию на vim, вам придется добавить указанную выше команду к вашим ~/.bashrc или ~/.profile или аналогичным файлам.
12
ответ дан 18 July 2018 в 07:03

Как узнать, что этот редактор

Нажмите 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.

Что такое ed?

Эд - древний редактор, начиная с того, как мониторы были (обычным). Он был разработан для компьютеров с интерактивным выходным периферийным устройством ed .

В начале 0 он отображает в строке количество строк в файле. По-видимому, это важная информация.

? означает, что ed не понимал, что вы набрали. Линейные принтеры работают медленно, поэтому редактор не тратит время и чернила для отображения бессмысленной информации, такой как сообщения об ошибках. Старая шутка (я не знаю происхождения) идет:

У Кен Томпсона есть автомобиль, который он помогал дизайну. В отличие от большинства автомобилей, в нем нет ни спидометра, ни газового датчика, ни любого другого большого количества идиотских огней, которые поражают современного водителя. Скорее, если водитель совершает ошибку, в центре приборной панели загорается гигантский «?». «Опытный водитель, - говорит Томпсон, - обычно знает, что не так».

Если вы чувствуете себя неопытным, вы можете выдать команду H (все команды, кроме одного, являются одной буквой (не считая данных аргументы), потому что кому нравится печатать), и вы получите сообщения об ошибках. Например, если вы просто нажмете Ctrl ...

? H Invalid address

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

Как получить другой редактор

Команда crontab, как и большинство команд, которые запустите текстовый редактор, проверьте переменные среды VISUAL и EDITOR (в этом порядке), чтобы решить, какую программу запускать, возвращаясь к системному умолчанию. Если для любой из этих переменных установлено значение ed, измените его или удалите.

В Ubuntu (и Debian и других) системный редактор по умолчанию - /etc/alternatives/editor, который управляется с помощью механизма альтернатив , По умолчанию он выбирает «лучший» редактор, который установлен, где «лучший» определяется приоритетами, установленными сторонними разработчиками пакетов. Для настройки альтернативы используйте пакет с таким же именем . Вы можете отобразить доступные редакторы и их приоритеты с помощью

update-alternatives --display editor

ed имеет приоритет -100, тогда как все остальные «разумные» редакторы имеют положительный приоритет, поэтому единственный способ, которым он будет использоваться по умолчанию - если редактор не установлен. По умолчанию установка Ubuntu использует nano в качестве редактора по умолчанию с приоритетом 400. Если альтернатива установлена ​​на ed, вы можете изменить ее с помощью

sudo update-alternatives --config editor
38
ответ дан 18 July 2018 в 07:03

Чтобы использовать редактор VI для редактирования crontab, используйте следующую команду:

EDITOR="vi" crontab -e

или, если вы хотите редактировать другой редактор, например gedit, nano и т. д., просто замените vi редактором имя.

4
ответ дан 18 July 2018 в 07:03

Это ed

По умолчанию его приглашение представляет собой пустую строку. Если вы хотите выйти, просто введите q. Не префикс с :. Если у вас есть несохраненные изменения, он ответит с помощью ?. Вы можете интерпретировать это как «вы уверены?» И подтвердить, снова выполнив команду q. Кстати, любая команда, которую он не понимает, также заставит ее ответить ?. Это [... d1]

. Его команды - это то, на чем основан vim / vi / ex / sed, поэтому команды, такие как g/re/p, %s/vi/&m/g, 1,3d, /pattern/,$d, w, q, wq работают так же, как vim.

Команды, такие как i, a и c, входят в режим вставки. Чтобы выйти из режима вставки и вернуться в командный режим, просто введите строку, которая имеет только .. Чтобы «переместить» в другую строку, просто введите номер строки, смещение от текущей строки, например +2 или -1, или регулярное выражение в качестве команды для перехода к этой строке. . означает текущую строку в командном режиме. Вы можете использовать его, чтобы знать, где вы находитесь. $ означает последнюю строку.

Кстати, если вы хотите узнать больше об этом, это будет GNU-программа в Linux, большая часть ее документации находится в info ed вместо man ed.

Вот пример сеанса с добавленными комментариями (не принято 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

EDIT: Как упоминания о грамотности, более полезные сообщения об ошибках могут быть активированы с помощью 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, соответственно. Это универсальный переносной способ установки редактора; вы можете сделать это в любом дистрибутиве.

В 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.
64
ответ дан 18 July 2018 в 07:03

С вашего вопроса кажется, что ваш EDITOR по умолчанию не является vim, и у вас проблемы с текущим редактором по умолчанию.

В приведенной ниже команде EDITOR по умолчанию будет vim

export EDITOR=vim

После установки редактора по умолчанию vim, запуск crontab -e будет использовать vim в качестве вашего редактора.

Примечания:

Если вы предпочитаете, вы можете выбрать другой EDITOR в качестве редактора по умолчанию. Если вы хотите окончательно установить редактор по умолчанию на vim, вам придется добавить указанную выше команду к вашим ~/.bashrc или ~/.profile или аналогичным файлам.
12
ответ дан 24 July 2018 в 18:43

Как узнать, что этот редактор

Нажмите 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.

Что такое ed?

Эд - древний редактор, начиная с того, как мониторы были (обычным). Он был разработан для компьютеров с интерактивным выходным периферийным устройством ed .

В начале 0 он отображает в строке количество строк в файле. По-видимому, это важная информация.

? означает, что ed не понимал, что вы набрали. Линейные принтеры работают медленно, поэтому редактор не тратит время и чернила для отображения бессмысленной информации, такой как сообщения об ошибках. Старая шутка (я не знаю происхождения) идет:

У Кен Томпсона есть автомобиль, который он помогал дизайну. В отличие от большинства автомобилей, в нем нет ни спидометра, ни газового датчика, ни любого другого большого количества идиотских огней, которые поражают современного водителя. Скорее, если водитель совершает ошибку, в центре приборной панели загорается гигантский «?». «Опытный водитель, - говорит Томпсон, - обычно знает, что не так».

Если вы чувствуете себя неопытным, вы можете выдать команду H (все команды, кроме одного, являются одной буквой (не считая данных аргументы), потому что кому нравится печатать), и вы получите сообщения об ошибках. Например, если вы просто нажмете Ctrl ...

? H Invalid address

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

Как получить другой редактор

Команда crontab, как и большинство команд, которые запустите текстовый редактор, проверьте переменные среды VISUAL и EDITOR (в этом порядке), чтобы решить, какую программу запускать, возвращаясь к системному умолчанию. Если для любой из этих переменных установлено значение ed, измените его или удалите.

В Ubuntu (и Debian и других) системный редактор по умолчанию - /etc/alternatives/editor, который управляется с помощью механизма альтернатив , По умолчанию он выбирает «лучший» редактор, который установлен, где «лучший» определяется приоритетами, установленными сторонними разработчиками пакетов. Для настройки альтернативы используйте пакет с таким же именем . Вы можете отобразить доступные редакторы и их приоритеты с помощью

update-alternatives --display editor

ed имеет приоритет -100, тогда как все остальные «разумные» редакторы имеют положительный приоритет, поэтому единственный способ, которым он будет использоваться по умолчанию - если редактор не установлен. По умолчанию установка Ubuntu использует nano в качестве редактора по умолчанию с приоритетом 400. Если альтернатива установлена ​​на ed, вы можете изменить ее с помощью

sudo update-alternatives --config editor
38
ответ дан 24 July 2018 в 18:43
  • 1
    Gilles, should not В Ubuntu (и Debian и др.) Системный редактор по умолчанию: / etc / alternatives / editor перефразируется до . В Ubuntu (и Debian и других) система по умолчанию редактор / usr / bin / editor ? – heemayl 12 September 2017 в 11:38
  • 2
    довольно всеобъемлющий (за исключением того, что он не упоминает переменную eniv EDITOR, но, возможно, специально, чтобы люди использовали правильный способ установить его в системе с помощью альтернатив обновления). Возможно, изменение: ps с pstree -sap $$ ? (проще понять, какой редактор был запущен, так как он теперь находится в древовидном формате) – Olivier Dulac 12 September 2017 в 12:23
  • 3
    @heemayl /usr/bin/editor является символической ссылкой на /etc/alternatives/editor. Тот факт, что приложения называют /usr/bin/editor, является деталью, которую я пропустил. – Gilles 12 September 2017 в 13:20
  • 4
    @OlivierDulac Я упоминаю EDITOR и VISUAL. Они на самом деле являются правильным способом выбора редактора, поскольку это предпочтение пользователя, а не общесистемное предпочтение. Я предпочитаю придерживаться ps здесь, чтобы все было просто. – Gilles 12 September 2017 в 13:21
  • 5
    «компьютеры, интерактивное периферийное устройство вывода которых было линейным принтером». Линейным принтером было не интерактивное устройство - это было относительно высокоскоростное (и дорогое) устройство для производства больших объемов печатной продукции. Вы имеете в виду «печатный терминал с клавиатурой», например, телетайп (который также может работать как устройство ввода / вывода с перфорированной бумажной лентой) или «гольф-мяч» IBM. печатная машинка. – alephzero 14 September 2017 в 10:10

Чтобы использовать редактор VI для редактирования crontab, используйте следующую команду:

EDITOR="vi" crontab -e

или, если вы хотите редактировать другой редактор, например gedit, nano и т. д., просто замените vi редактором имя.

4
ответ дан 24 July 2018 в 18:43
  • 1
    Thanx миллион! С EDITOR = "vi" crontab -e это работает. – justme 11 September 2017 в 17:21
  • 2
    @gronostaj Это не то же самое, что и любой другой ответ, который был опубликован здесь. Установка переменной окружения для одиночного запуска одной команды - это не то же самое, что экспортировать ее для всех последующих команд, запущенных из текущего экземпляра оболочки. Этот ответ полезен для постоянного изменения настройки, но для управления редактором за запуск это правильный ответ. – Eliah Kagan 11 September 2017 в 21:26
  • 3
    Действительно, знание того, как добавлять переменные среды в командной строке, очень важно, так как изменение переменной постоянно может быть нежелательным. Одной из тонких сильных сторон оболочек * nix является способность делать это так легко. – Monty Harder 12 September 2017 в 01:05

Это ed

По умолчанию его приглашение представляет собой пустую строку. Если вы хотите выйти, просто введите q. Не префикс с :. Если у вас есть несохраненные изменения, он ответит с помощью ?. Вы можете интерпретировать это как «вы уверены?» И подтвердить, снова выполнив команду q. Кстати, любая команда, которую он не понимает, также заставит ее ответить ?. Это [... d1]

. Его команды - это то, на чем основан vim / vi / ex / sed, поэтому команды, такие как g/re/p, %s/vi/&m/g, 1,3d, /pattern/,$d, w, q, wq работают так же, как vim.

Команды, такие как i, a и c, входят в режим вставки. Чтобы выйти из режима вставки и вернуться в командный режим, просто введите строку, которая имеет только .. Чтобы «переместить» в другую строку, просто введите номер строки, смещение от текущей строки, например +2 или -1, или регулярное выражение в качестве команды для перехода к этой строке. . означает текущую строку в командном режиме. Вы можете использовать его, чтобы знать, где вы находитесь. $ означает последнюю строку.

Кстати, если вы хотите узнать больше об этом, это будет GNU-программа в Linux, большая часть ее документации находится в info ed вместо man ed.

Вот пример сеанса с добавленными комментариями (не принято 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

EDIT: Как упоминания о грамотности, более полезные сообщения об ошибках могут быть активированы с помощью 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, соответственно. Это универсальный переносной способ установки редактора; вы можете сделать это в любом дистрибутиве.

В 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.
64
ответ дан 24 July 2018 в 18:43
  • 1
    В современных версиях известны сообщения об ошибках английского языка, вам просто нужно использовать h, чтобы попросить их (или H, чтобы навсегда включить его). – grawity 13 September 2017 в 16:00
  • 2
    (Кроме того, % представляется изобретением ex . Официально ed использует , для обозначения всех строк, хотя некоторые версии также принимают %.) – grawity 13 September 2017 в 16:00
  • 3
    Это correct , но также следует указать переменные среды EDITOR и VISUAL. – chrylis 14 September 2017 в 03:35
  • 4
    Большинство команд в ed такие же, как в vi, за исключением того, что вам не нужно нажимать & quot;: & quot; сначала выйти из режима графического редактирования. Я изучил Unix, когда «настоящие программисты» не тратили время на использование GUI - 80x25 "зеленый экран" терминал работает почти , а также прошивает карту памяти IBM 029 для редактирования, но не совсем;) – alephzero 14 September 2017 в 10:03
  • 5
    @chrylis EDITOR и VISUAL на самом деле не актуальны. Вопрос был в основном: что такое этот редактор и как его использовать? (что это 0 и ?, и как я могу сохранить?). – JoL 14 September 2017 в 16:59

Другие вопросы по тегам:

Похожие вопросы: