यह संपादक क्या है जो क्रॉस्टैब द्वारा खोला जाता है?


41

मैं crontab को संपादित करना चाहता हूं। यह वीआई माना जाता है, लेकिन यह नहीं है, जैसा कि आप देख सकते हैं:

root@euve252628:~# crontab -e

0

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

?

:wq

?

हां, इसने मुझे ए ?। और यह मुझे एक शून्य क्यों देता है?

जब मैं टाइप करता हूं qऔर प्रेस करता हूं Enter- तो यह क्विट हो जाता है। मुझे यह जानने की जरूरत है कि कैसे बचाया जाए, क्योंकि यह क्लासिक वीआई नहीं है।


5
सबसे अधिक संभावना है ed: डिफ़ॉल्ट रूप से, यह एक चरित्र गणना देता है (जो कि डेबियन आधारित प्रणालियों में आमतौर 888पर पहली बार होता है, टेम्पलेट "खाली" क्रॉन्ताब में वर्णों की संख्या)। यदि आप 0 की गिनती देख रहे हैं, तो आपने उसे संशोधित कर दिया होगा। Crontab -e कमांड को ठीक से काम न करने पर
स्टीलड्राइवर

31
एड, यार! ! मैन एड: gnu.org/fun/jokes/ed-msg.html
जूहीस्ट

6
@juhist बल्कि एक टिप्पणी की तुलना में इस होना चाहिए जवाब।
मिठाई

1
आप आम तौर पर सिर्फ ओवरराइड करना चाहते हैं EDITOR: कुछ और करने के लिए, यदि आप वास्तव में एड का उपयोग करने में रुचि रखते हैं, यह एक बेहतरीन परिचय है sanctum.geek.nz/arabesque/actually-using-ed
Xiong Chiamiov

@ अन्याय, वैसे, StackExchange में आपका स्वागत है! यदि आपको कोई ऐसा उत्तर मिलता है, जो आपके प्रश्न का सबसे अच्छा उत्तर देता है, तो आप इसे बगल में दिए गए चेकमार्क पर क्लिक करके स्वीकार कर सकते हैं।
जोएल

जवाबों:


65

यही कारण है कि के ed

डिफ़ॉल्ट रूप से इसका संकेत खाली स्ट्रिंग है। यदि आप छोड़ना चाहते हैं, तो बस दर्ज करें q। साथ उपसर्ग न करें :। यदि आपके पास बिना सहेजे गए परिवर्तन हैं, तो यह उत्तर देगा ?। आप व्याख्या कर सकते हैं कि "क्या आप निश्चित हैं?", और qफिर से कमांड करके पुष्टि करें। वैसे किसी भी कमांड को यह समझ में नहीं आता है कि यह भी जवाब देने का कारण होगा ?। यह एकमात्र त्रुटि संदेश है जो इसे जानता है।

इसके आदेशों हैं क्या vim / vi / पूर्व / एसईडी, पर आधारित है आदेशों की तरह तो g/re/p, %s/vi/&m/g, 1,3d, /pattern/,$d, w, q, wqबस vim की तरह काम करते हैं।

आदेश की तरह है i, aऔर cडालने मोड में जाने। इन्सर्ट मोड को छोड़ने और कमांड मोड में वापस जाने के लिए, बस एक लाइन डालें, जिसमें केवल a हो .। एक और लाइन के लिए "चाल" के लिए, बस लाइन नंबर, एक तरह वर्तमान पंक्ति से ऑफसेट प्रवेश +2या -1, या कमांड को किसी रेगुलर एक्सप्रेशन कि लाइन में जाने के लिए। .कमांड मोड में वर्तमान लाइन का मतलब है। आप इसका उपयोग यह जानने के लिए कर सकते हैं कि आप कहां हैं। $अंतिम पंक्ति का मतलब है।

वैसे, यदि आप इसके बारे में अधिक जानना चाहते हैं, तो यह लिनक्स में एक जीएनयू कार्यक्रम है, इसके 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

EDIT: ग्रेविटी उल्लेख की तरह, अधिक उपयोगी त्रुटि संदेश के साथ सक्रिय किया जा सकता है hया H। इसके अलावा, एक कमांड के रेंज भाग के ,बजाय %"सभी लाइनों" को संदर्भित करने का आधिकारिक तरीका है ed। जीएनयू में ed, इसके लिए उपयोग करने की संभावना %का समर्थन किया गया है लेकिन infoमैनुअल में उल्लेख नहीं किया गया है । %सभी लाइनों के लिए उपयोग स्पष्ट रूप से आविष्कार किया गया था ex, प्रतीत होता है क्योंकि, वहाँ, ,साधन .,.की 1,$तरह के बजाय ed

EDIT2: एक अलग संपादक की स्थापना

उल्लिखित अन्य उत्तरों की तरह, यदि आप एक अलग संपादक निर्दिष्ट करना चाहते हैं, तो आप ऐसा कर सकते हैं EDITORया VISUALपर्यावरण चर सेट करके । इस उत्तर में दोनों के बीच के अंतर को समझाया गया है ।

यदि आप इसे एकल कमांड के लिए सेट करना चाहते हैं तो आप ऐसा कर सकते हैं:

EDITOR=vi crontab -e

या इस तरह अगर आप चाहते हैं कि शेल सत्र में सभी प्रोग्राम इसका उपयोग करें:

export EDITOR=vi
crontab -e

यदि आप चाहते हैं कि आप इसे क्रमशः बश के लिए उपयोगकर्ता या सिस्टम सेटिंग के आधार पर सहेज सकते हैं या exportअंदर ले जा सकते हैं। संपादक को सेट करने के लिए यूनिक्स पोर्टेबल तरीका है; आप इसे किसी भी वितरण में कर सकते हैं।~/.profile/etc/profile

उबंटू में, 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स्थायी रूप से इसे सक्षम करने के लिए) पूछने के लिए उपयोग करने की आवश्यकता है ।
ग्रैविटी

2
(इसके अलावा, %एक पूर्व आविष्कार प्रतीत होता है । आधिकारिक तौर पर एड, सभी लाइनों का मतलब है, भले ही कुछ संस्करणों के %रूप में अच्छी तरह से स्वीकार करने के लिए उपयोग करता है ।)
विशालता

यह सही है लेकिन पर्यावरण EDITORऔर VISUALपर्यावरण चर का भी उल्लेख करना चाहिए ।
क्राइसिस -ऑन स्ट्राइक-

अधिकांश आदेश edउसी तरह के हैं vi, जिसमें आपको प्रेस करने की आवश्यकता नहीं है: "" ग्राफिक संपादन मोड से बाहर निकलने के लिए। मैंने यूनिक्स सीखा जब "वास्तविक प्रोग्रामर" ने GUIs का उपयोग करने में समय बर्बाद नहीं किया - एक 80x25 "हरी स्क्रीन" टर्मिनल लगभग संपादन के लिए एक आईबीएम 029 कार्ड पंच के रूप में अच्छी तरह से काम करता है , लेकिन काफी नहीं;)
alephzero

@chrylis EDITORऔर VISUALवास्तव में प्रासंगिक नहीं हैं। प्रश्न मूल रूप से था: यह संपादक क्या है, और मैं इसका उपयोग कैसे करूं? (यह 0और यह क्या है ?, और मैं कैसे बचा सकता हूं?)।
जोएल सेप

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शुरुआत में यह प्रदर्शित करता है फ़ाइल में लाइनों की संख्या है। जाहिर है कि यह महत्वपूर्ण जानकारी है।

?इसका मतलब है कि एड को समझ नहीं आया कि आपने क्या टाइप किया है। लाइन प्रिंटर धीमे होते हैं, इसलिए त्रुटि संदेश जैसे व्यर्थ जानकारी प्रदर्शित करने के लिए ed समय और स्याही बर्बाद नहीं करता है। एक पुराना चुटकुला (मुझे मूल नहीं पता) जाता है:

केन थॉम्पसन के पास एक ऑटोमोबाइल है जिसे उन्होंने डिजाइन करने में मदद की। अधिकांश ऑटोमोबाइल के विपरीत, इसमें न तो स्पीडोमीटर है, न ही गैस गेज, और न ही कई अन्य बेवकूफ लाइटें हैं जो आधुनिक चालक को परेशान करती हैं। बल्कि, अगर ड्राइवर कोई गलती करता है, तो विशालकाय "?" डैशबोर्ड के केंद्र में रोशनी करता है। "अनुभवी चालक," थॉम्पसन कहते हैं, "आमतौर पर पता चल जाएगा कि क्या गलत है।"

यदि आप अनुभवहीन महसूस करते हैं, तो आप कमांड जारी कर सकते हैं H(सभी कमांड लेकिन एक एक अक्षर हैं (डेटा तर्कों की गिनती नहीं), क्योंकि टाइपिंग किसे पसंद है), और आपको त्रुटि संदेश मिलेंगे। उदाहरण के लिए, यदि आप सिर्फ प्रेस Enter...

?
H
Invalid address

स्पष्ट है, है ना? (एक खाली रेखा खाली कमांड है - वह जो एक अक्षर नहीं है। खाली कमांड अगली पंक्ति में जाती है और इसे प्रिंट करती है। यदि आप फ़ाइल के अंत में हैं, जो हमेशा खाली रहता है। फ़ाइल, कोई अगली पंक्ति नहीं है, इसलिए जिस पते पर आपको स्थानांतरित करने का अनुरोध किया गया है वह अमान्य है।)

कैसे एक और संपादक पाने के लिए

crontabआदेश, सबसे आदेशों एक पाठ संपादक चलाने की तरह है, वातावरण चर की जाँच VISUALऔर EDITOR(इसी क्रम में) एक सिस्टम डिफ़ॉल्ट पर वापस गिरने चलाने के लिए जो कार्यक्रम तय करने के लिए,। यदि इनमें से कोई भी चर सेट है ed, तो इसे बदल दें या इसे हटा दें।

उबंटू (और डेबियन और अन्य) पर, सिस्टम डिफ़ॉल्ट संपादक है /etc/alternatives/editor, जिसे वैकल्पिक तंत्र के माध्यम से प्रबंधित किया जाता है । डिफ़ॉल्ट रूप से यह स्थापित किए गए "सर्वश्रेष्ठ" संपादक को चुनता है, जहां पैकेज अनुरक्षकों द्वारा निर्धारित प्राथमिकताओं द्वारा "सर्वश्रेष्ठ" को परिभाषित किया जाता है। update-alternativesकिसी विकल्प को कॉन्फ़िगर करने के लिए उपयोग करें । आप उपलब्ध संपादकों और उनकी प्राथमिकताओं को प्रदर्शित कर सकते हैं

update-alternatives --display editor

edप्राथमिकता -100 है, जबकि अन्य सभी "समझदार" संपादकों की सकारात्मक प्राथमिकता है, इसलिए डिफ़ॉल्ट रूप से इसका उपयोग केवल उसी तरह किया जाएगा यदि कोई संपादक स्थापित नहीं किया गया है। उबंटू का एक डिफ़ॉल्ट इंस्टॉलेशन नैनो को डिफ़ॉल्ट एडिटर के रूप में प्राथमिकता के साथ 400 का उपयोग करता है। यदि विकल्प को सेट किया गया है ed, तो आप इसे बदल सकते हैं

sudo update-alternatives --config editor

गिलेस, उबंटू (और डेबियन और अन्य) पर नहीं होना चाहिए , सिस्टम डिफॉल्ट एडिटर / आदि / अल्टरनेटिव्स / एडिटर को ऑन उबंटू (और डेबियन और अन्य) में रीफ्रैश किया जाता है, सिस्टम डिफॉल्ट एडिटर / usr / बिन / एडिटर है ?
हेमायल सेप

काफी व्यापक (सिवाय इसके EDITOR env वैरिएबल का उल्लेख नहीं है; लेकिन शायद उद्देश्य के लिए, ताकि लोग इसे अपडेट-विकल्प के माध्यम से सिस्टम पर सेट करने के लिए उचित तरीके का उपयोग करें)। शायद बदल सकते हैं: psसाथ pstree -sap $$ ? (यह पता लगाना आसान है कि किस संपादक को लॉन्च किया गया था, क्योंकि यह अब एक पेड़ के प्रारूप में है)
ओलिवियर दुलैक

@heemayl /usr/bin/editorको एक सहिष्णुता है /etc/alternatives/editor। तथ्य यह है कि आवेदन कॉल /usr/bin/editorएक विस्तार है जिसे मैंने छोड़ दिया है।
गिलेस एसओ- बुराई को रोकना '

3
@OlivierDulac मैं उल्लेख EDITORऔर VISUAL। वे वास्तव में एक संपादक को चुनने का उचित तरीका हैं क्योंकि यह एक उपयोगकर्ता वरीयता है, न कि सिस्टम-वाइड वरीयता। मैं psचीजों को सरल रखने के लिए यहां रहना पसंद करता हूं ।
गिल्स एसओ- बुराई को रोकना '

1
"... कंप्यूटर जिनका इंटरेक्टिव आउटपुट परिधीय एक लाइन प्रिंटर था।" एक लाइन प्रिंटर एक इंटरैक्टिव डिवाइस नहीं था - यह बड़ी मात्रा में मुद्रित आउटपुट के उत्पादन के लिए एक अपेक्षाकृत उच्च गति (और महंगा) उपकरण था। आपका मतलब है "एक कीबोर्ड के साथ एक प्रिंटिंग टर्मिनल", एक टेलेटाइप की तरह (जो एक छिद्रित पेपर टेप I / O डिवाइस के रूप में भी काम कर सकता है) या एक आईबीएम "गोल्फबॉल" टाइपराइटर।
एलेफोज़रो

12

आपके प्रश्न से ऐसा लगता है कि आपका डिफ़ॉल्ट EDITOR नहीं है vim, और आपको वर्तमान डिफ़ॉल्ट संपादक के साथ समस्या है।

नीचे दिया गया कमांड डिफ़ॉल्ट EDITOR होगा vim

export EDITOR=vim

डिफ़ॉल्ट संपादक को होने के लिए सेट करने के बाद vim, रनिंग आपके संपादक के रूप में crontab -eउपयोग करेगा vim

टिप्पणियाँ:

  1. यदि आप चाहें, तो आप अपने डिफ़ॉल्ट संपादक के रूप में विभिन्न EDITOR का चयन कर सकते हैं
  2. आप करने के लिए डिफ़ॉल्ट संपादक सेट करना चाहते हैं vimस्थायी रूप से, आप अपने को उपरोक्त आदेश जोड़ना होगा ~/.bashrcया ~/.profileया इसी तरह की फाइल।

4

Crontab को संपादित करने के लिए VI संपादक का उपयोग करने के लिए, नीचे दिए गए कमांड का उपयोग करें।

EDITOR="vi" crontab -e

या, यदि आप gedit, नैनो, आदि जैसे किसी अन्य संपादक के साथ संपादित करना चाहते हैं, तो बस vi को संपादक के नाम से बदल दें।


एक लाख से भी अधिक! EDITOR = "vi" crontab -e के साथ यह काम करता है।
justme

3
@gronostaj यह यहाँ पोस्ट किए गए किसी भी अन्य उत्तर के समान नहीं है। एकल कमांड के एक रन के लिए एक पर्यावरण चर सेट करना वर्तमान शेल उदाहरण से चलने वाले सभी बाद के आदेशों के लिए इसे निर्यात करने के समान नहीं है। यह उत्तर सेटिंग को स्थायी रूप से बदलने के लिए उपयोगी है, लेकिन प्रति-संपादक को नियंत्रित करने के लिए, यह सही उत्तर है।
एलियाह कगन

3
दरअसल, कमांड लाइन पर पर्यावरण वेरिएबल्स को प्रीपेंड करने का तरीका जानना बहुत महत्वपूर्ण है, क्योंकि वेरिएबल को स्थायी रूप से बदलना अवांछनीय हो सकता है। * निक्स के गोले की सूक्ष्म शक्तियों में से एक यह इतनी आसानी से करने की क्षमता है।
मोंटी हार्डर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.