crontabによって開かれるこのエディターは何ですか?


41

crontabを編集したい。Viを想定していますが、ご覧のとおり、そうではありません。

root@euve252628:~# crontab -e

0

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

?

:wq

?

はい、それは私に与えた?。そして、なぜそれは私にゼロを与えるのですか?

a qと入力して押すEnterと、終了します。保存方法を知っておく必要があります。これは古典的なViではないからです。


5
最も可能性の高いed:デフォルトでは、文字カウントを提供します(Debianベースのシステムでは通常888、テンプレートが「空」のcrontabの文字数であるため、これが初めてです)。カウントが0になっている場合は、修正している必要があります。参照のcrontab -eコマンドが正常に動作していない
steeldriver

31
エド、男!!man ed:gnu.org/fun/jokes/ed-msg.html
juhist

6
@juhistではなく、これがあるべきコメントの答え。
デザート

1
あなたは通常、単に上書きする一方でEDITOR他のものにあなたが実際にEDを使用してに興味がある場合、これは偉大な紹介です:sanctum.geek.nz/arabesque/actually-using-ed
熊Chiamiov

@justme、ところで、StackExchangeへようこそ!あなたの質問に最もよく答える答えを見つけたら、その隣のチェックマークをクリックしてそれを受け入れることができます。
JOL

回答:


65

それは ed

デフォルトでは、プロンプトは空の文字列です。終了する場合は、単に入力しqます。プレフィックスを付けないでください:。変更を保存していない場合は、で返信し?ます。これを「本当によろしいですか?」と解釈し、q再度コマンドを実行して確認できます。ちなみに、それが理解できないコマンドは、応答を引き起こし?ます。それが知っている唯一のエラーメッセージです。

そのコマンドが何であるかのvim / VI / EX / SED、に基づいているコマンドは好きなのでg/re/p%s/vi/&m/g1,3d/pattern/,$dwqwqちょうどvimのような作品。

以下のようなコマンドiaおよびは、c挿入モードに入ります。挿入モードを終了してコマンドモードに戻るには、のみの行を入力し.ます。別の行に「移動」するには、行番号、+2またはなどの現在の行からのオフセット-1、またはその行に移動するコマンドとして正規表現を入力します。.コマンドモードの現在の行を意味します。どこにいるかを知るために使用できます。$最後の行を意味します。

ちなみに、LinuxのGNUプログラムであるこれについてもっと知りたい場合は、ドキュメントのほとんどがの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

編集:grawityの言及と同様に、より有用なエラーメッセージはhまたはでアクティブにできますH。また、コマンドの範囲部分では,なく、の%「すべての行」を参照する公式の方法edです。GNU edでは、%これに使用する可能性がサポートされていinfoますが、マニュアルには記載されていません。使用の%すべての行については明らかで発明されたex、一見ので、そこに、,手段.,.ではなく、1,$のようにed

EDIT2:別のエディターの設定

前述の他の回答と同様に、別のエディターを指定する場合はEDITORVISUAL環境変数または環境変数を設定することで指定できます。この2つの違いはこの答えで説明されます

単一のコマンドに設定する場合は、次のようにします。

EDITOR=vi crontab -e

または、シェルセッションで起動されたすべてのプログラムで使用する場合は、次のようにします。

export EDITOR=vi
crontab -e

exportin ~/.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

これは正しいですEDITORVISUAL環境変数にも言及する必要があります。
クリリス

のコマンドのほとんどはin edと同じviですが、グラフィック編集モードを終了するために最初に「:」を押す必要はありません。「本当のプログラマー」がGUIを使用して時間を無駄にしないときにUnixを学びました。80x25の「グリーンスクリーン」ターミナルは、編集用のIBM 029カードパンチとほぼ同じように機能しますが、まったくそうではありません;)
alephzero

@chrylis EDITORVISUALはそれほど関係ありません。質問は基本的に、このエディターとは何で、どのように使用するのですか?(これ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

edとは何ですか?

エドは、モニターが(ありふれた)ものになる前にさかのぼる古代の編集者です。インタラクティブな出力周辺機器がテレプリンターであるコンピューター用に設計されました。

最初0に表示されるのは、ファイル内の行数です。明らかにそれは重要な情報です。

?edは入力内容を理解できなかったことを意味します。ラインプリンターは遅いので、edはエラーメッセージなどの意味のない情報を表示するために時間とインクを無駄にしません。古いジョーク(私は起源を知りません)が行きます:

ケン・トンプソンには、デザインを手伝った自動車があります。ほとんどの自動車とは異なり、速度計もガスゲージも、現代のドライバーを悩ませている他の多数の馬鹿灯もありま​​せん。むしろ、ドライバーが間違えた場合、ダッシュボードの中央に巨大な「?」が点灯します。「経験豊富なドライバー」とトンプソンは言います。

経験が浅い場合は、コマンドを発行できHます(1つを除くすべてのコマンドは1文字(データ引数をカウントしない)。入力が好きなため)。エラーメッセージが表示されます。たとえば、単にEnter…を押すと

?
H
Invalid address

明らかですね。(空の行は空のコマンドです。1文字ではありません。空のコマンドは次の行に移動して印刷します。ファイルの最後にいる場合は、常に空です。ファイルには次の行がないため、移動を要求したアドレスは無効です。)

別のエディターを取得する方法

この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 / alternatives / editorであると言い換えると、Ubuntu(およびDebianなど)では、システムのデフォルトエディターは/ usr / bin / editorですか?
heemayl

非常に包括的です(EDITOR env変数については言及していませんか?ただし、変更される可能性がpsありpstree -sap $$ ます。(現在はツリー形式であるため、どのエディターが起動されたかを把握しやすくなります)
オリビエデュラック

@heemayl /usr/bin/editorはへのシンボリックリンク/etc/alternatives/editorです。アプリケーションが呼び出すという事実/usr/bin/editorは、私がスキップした詳細です。
ジル 'SO-悪であるのをやめる'

3
@OlivierDulac言及EDITORVISUALます。これは、システム全体の設定ではなくユーザーの設定であるため、実際にはエディターを選択する適切な方法です。私はps物事をシンプルに保つためにここに固執することを好みます。
ジル「SO-悪であるのをやめる」

1
「...インタラクティブな出力周辺機器がラインプリンターであったコンピューター。」ラインプリンターはインタラクティブなデバイスではありませんでした。大量の印刷出力を生成するための比較的高速な(そして高価な)デバイスでした。テレタイプ(パンチ紙テープI / Oデバイスとしても機能します)やIBMの「ゴルフボール」タイプライターのような「キーボード付きの印刷端末」を意味します。
alephzero

12

あなたの質問から、あなたのデフォルトのエディタはではないよう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をエディター名に置き換えます。


百万ありがとう!EDITOR = "vi" crontab -eを使用すると動作します。
justme

3
@gronostajこれは、ここに投稿された他の回答と同じではありません。1つのコマンドの1回の実行に対して環境変数を設定することは、現在のシェルインスタンスから実行される後続のすべてのコマンドに対して環境変数をエクスポートすることと同じではありません。その答えは、設定を永続的に変更するのに役立ちますが、エディターを実行ごとに制御するには、これが正しい答えです。
エリアケイガン

3
実際、変数を永続的に変更することは望ましくないため、コマンドラインで環境変数を追加する方法を知ることは非常に重要です。* nixシェルの微妙な長所の1つは、これを簡単に実行できることです。
モンティハーダー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.