Quel est cet éditeur qui est ouvert par crontab?

40

Je veux éditer crontab. Il est supposé être Vi, mais ce n’est pas le cas, comme vous pouvez le voir:

[email protected]:~# crontab -e

0

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

?

:wq

?

Oui, cela m'a donné un ? . Et pourquoi ça me donne un zéro?

Lorsque je tape q et que j'appuie sur Enter - il se ferme. J'ai besoin de savoir économiser, car ce n’est pas un Vi classique.

    
posée justme 11.09.2017 - 14:28
la source

4 réponses

64

C'est ed

Par défaut, son invite est la chaîne vide. Si vous voulez quitter, entrez simplement q . Ne pas préfixer avec : . Si vous avez des modifications non enregistrées, il vous répondra avec ? . Vous pouvez interpréter cela comme "êtes-vous sûr?", Et confirmez en commandant q à nouveau. Par ailleurs, toute commande qu'il ne comprend pas entraînera également la réponse ? . C'est le seul message d'erreur connu.

Ses commandes sont basées sur vim / vi / ex / sed, donc les commandes comme g/re/p , %s/vi/&m/g , 1,3d , /pattern/,$d , w , q , wq fonctionnent juste comme vim.

Les commandes telles que i , a et c passent en mode insertion. Pour quitter le mode insertion et revenir en mode commande, il suffit d'entrer une ligne qui n'a qu'un . . Pour "déplacer" vers une autre ligne, entrez simplement le numéro de ligne, un décalage par rapport à la ligne en cours, comme +2 ou -1 , ou une expression régulière en tant que commande pour accéder à cette ligne. . signifie la ligne courante en mode commande. Vous pouvez l'utiliser pour savoir où vous êtes. $ signifie la dernière ligne.

En passant, si vous voulez en apprendre plus à ce sujet, étant donné qu’il s’agit d’un programme GNU sous linux, la plupart de sa documentation se trouve dans info ed au lieu de man ed .

Voici un exemple de session, avec des commentaires ajoutés (non acceptés par 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: Comme les mentions de grawity, des messages d'erreur plus utiles peuvent être activés avec h ou H . De plus, , plutôt que % dans la partie plage d'une commande est la manière officielle de faire référence à "toutes les lignes" dans ed . Dans GNU ed , la possibilité d'utiliser % pour cela est prise en charge mais n'est pas mentionnée dans le manuel info . L'utilisation de % pour toutes les lignes a apparemment été inventée par ex , apparemment parce que, ici, , signifie .,. plutôt que 1,$ comme dans ed .

EDIT2: Définition d’un éditeur différent

Comme d’autres réponses mentionnées, si vous souhaitez spécifier un éditeur différent, vous pouvez le faire en définissant les variables d’environnement EDITOR ou VISUAL . La différence entre les deux est expliquée dans cette réponse .

Vous pouvez le faire comme ceci si vous voulez le définir pour une seule commande:

EDITOR=vi crontab -e

ou comme ça si vous voulez que tous les programmes lancés dans la session shell l’utilisent:

export EDITOR=vi
crontab -e

Vous pouvez enregistrer export dans ~/.profile ou /etc/profile , selon que vous voulez que ce soit un paramètre utilisateur ou système pour bash, respectivement. C'est le moyen unix portable pour définir l'éditeur; vous pouvez le faire dans n'importe quelle distribution.

Dans Ubuntu, il y a aussi la commande update-alternatives . L'éditeur par défaut actuel peut être vu avec update-alternatives --display editor , et vous pouvez utiliser update-alternatives --config editor pour le définir:

$ 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.
    
réponse donnée JoL 11.09.2017 - 18:29
la source
38

Comment savoir ce que cet éditeur est

Appuyez sur Ctrl + Z . Cela suspend l'éditeur et vous donne une invite de shell. À l'invite, exécutez ps pour voir quels processus sont en cours d'exécution sur ce terminal.

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 est le shell d'origine, crontab est attendu, sh est un autre shell qui doit avoir été appelé par crontab et ps est la commande ps en cours d'exécution. Cela laisse ed (fourni par package du même nom ).

Si vous ne savez pas comment quitter l'éditeur, vous pouvez le tuer à ce stade, avec kill 26302 ou kill %1 .

Qu'est-ce que ed?

Ed est un ancien éditeur, datant d’avant les moniteurs. Il a été conçu pour les ordinateurs dont le périphérique de sortie interactif était un téléimprimeur .

Le 0 affiché au début correspond au nombre de lignes du fichier. Evidemment, c'est une information importante.

? signifie que ed n'a pas compris ce que vous avez tapé. Les imprimantes linéaires sont lentes et ne perdent pas de temps et d’encre pour afficher des informations inutiles telles que des messages d’erreur. Une vieille blague (je ne connais pas l'origine) va:

  

Ken Thompson a une automobile qu’il a aidé à concevoir. Contrairement à la plupart des automobiles, il n’a ni compteur de vitesse, ni indicateur de gaz, ni aucun des nombreux autres projecteurs idiots qui affligent le conducteur moderne. Au contraire, si le conducteur commet une erreur, un géant "?" S'allume au centre du tableau de bord. "Le chauffeur expérimenté, dit Thompson, saura généralement ce qui ne va pas."

Si vous vous sentez inexpérimenté, vous pouvez lancer la commande H (toutes les commandes sauf une sont une seule lettre (sans compter les arguments de données), car qui aime taper), et vous obtiendrez des messages d'erreur. Par exemple, si vous appuyez simplement sur Enter ...

?
H
Invalid address

Clair, n'est-ce pas? (Une ligne vide est la commande vide - celle qui n’est pas une lettre unique. La commande vide passe à la ligne suivante et l’imprime. Si vous êtes à la fin du fichier, ce qui est toujours le cas dans une zone vide. fichier, il n'y a pas de ligne suivante, donc l'adresse à laquelle vous avez demandé de déplacer est invalide.)

Comment obtenir un autre éditeur

La commande crontab , comme la plupart des commandes exécutant un éditeur de texte, vérifie les variables d'environnement VISUAL et EDITOR (dans cet ordre) pour décider du programme à exécuter et revenir à une valeur par défaut du système. Si l'une de ces variables est définie sur ed , modifiez-la ou supprimez-la.

Sous Ubuntu (et Debian et autres), l’éditeur par défaut du système est /etc/alternatives/editor , géré via le mécanisme de remplacement . . Par défaut, il sélectionne le "meilleur" éditeur installé, où "meilleur" est défini par les priorités définies par les responsables de paquets. Utilisez update-alternatives pour configurer une alternative. Vous pouvez afficher les éditeurs disponibles et leurs priorités avec

.
update-alternatives --display editor

ed a la priorité -100, alors que tous les autres éditeurs "sensibles" ont une priorité positive, de sorte que la seule façon de l'utiliser par défaut est si aucun éditeur n'a été installé. Une installation par défaut d'Ubuntu utilise nano comme éditeur par défaut, avec la priorité 400. Si l'alternative a été définie sur ed , vous pouvez la changer avec

sudo update-alternatives --config editor
    
réponse donnée Gilles 11.09.2017 - 21:54
la source
12

D'après votre question, il semble que votre éditeur par défaut n'est pas vim et que vous rencontrez des problèmes avec l'éditeur par défaut actuel.

La commande ci-dessous définit l'EDITEUR par défaut sur vim

export EDITOR=vim

Après avoir défini l'éditeur par défaut sur vim , l'exécution de crontab -e utilisera vim comme éditeur.

Notes:

  1. Si vous préférez, vous pouvez choisir un éditeur différent comme éditeur par défaut
  2. Si vous souhaitez définir l’éditeur par défaut sur vim de façon permanente, vous devrez ajouter la commande ci-dessus à votre fichier ~/.bashrc ou ~/.profile ou similaire.
réponse donnée Yaron 11.09.2017 - 14:37
la source
4

Pour utiliser l'éditeur de VI pour éditer crontab, utilisez la commande ci-dessous.

EDITOR="vi" crontab -e

ou, si vous voulez éditer avec un autre éditeur comme gedit, nano, etc., remplacez simplement vi par le nom de l'éditeur.

    
réponse donnée harsha 11.09.2017 - 14:42
la source

Lire d'autres questions sur les étiquettes