तीर कुंजियों का उपयोग किए बिना मैं अंतिम कमांड कैसे दोहरा सकता हूं?


115

मुझे पता है कि मैं Upपिछले आदेशों के माध्यम से पुनरावृति का उपयोग कर सकता हूं । अंतिम कमांड को चलाने में केवल Up+ शामिल है Enter। हालाँकि, मैं हैप्पी हैकिंग कीबोर्ड खरीदने के बारे में सोच रहा था क्योंकि मैं बहुत समय बिताता हूँ vim

इस कीबोर्ड में कोई तीर कुंजी नहीं है, और एकमात्र तरीका मुझे पता है कि इस तरह के व्यवहार को कैसे प्राप्त किया जाए Ctrl+ दबाकर Rऔर मेरे पिछले आदेश को दोहराने के लिए शुरू किया जाए।

क्या तीर कुंजी के बिना UNIX टर्मिनल में Up+ अनुकरण करने का एक आसान तरीका है Enter?


1
आपको टर्मिनल टैग को आपके द्वारा उपयोग किए जाने वाले शेल से बदलना चाहिए ।
क्रिस्टियन सियुपिटु

2
@ उजागर नहीं माउस ...
बल्ली से ढकेलना

क्या 2006 में हैप्पी हैकिंग कीबोर्ड बंद नहीं किया गया था?
पीटर मोर्टेंसन

@PeterMortensen नहीं यह अभी भी उपलब्ध है। आप पहले संस्करण का उल्लेख कर सकते हैं, लेकिन नए मॉडल उपलब्ध रहते हैं।
मात्रा

जवाबों:


164

साथ cshया किसी खोल लागू करने cshकी तरह इतिहास प्रतिस्थापन ( tcsh, bash, zsh):

!!

तब Enter


या वैकल्पिक रूप से :

!-1

तब Enter


या Ctrl+ P,Enter


जादू की जगह

इसके अलावा, कि ध्यान दें !!और !-1आप के लिए नहीं ऑटो का विस्तार होगा, जब तक आप उन्हें अमल (जब बहुत देर हो चुकी हो सकता है)।

यदि का उपयोग कर bash, आप रख सकते हैं bind Space:magic-spaceमें ~/.bashrc, तो दबाने Spaceआदेश के बाद उन्हें इनलाइन ऑटो का विस्तार होगा, आप क्रियान्वयन से पहले उन्हें निरीक्षण करने के लिए अनुमति देता है। यह कुछ समय पहले चलाए गए कमांड से इतिहास विस्तार के लिए विशेष रूप से उपयोगी है, उदाहरण के !echoलिए शुरू होने वाले अंतिम कमांड रन को खींच देगा echo। मैजिक स्पेस के साथ, आपको चलने से पहले कमांड का पूर्वावलोकन करना है।

bindkey ' ' magic-spaceमें tcshया करने के बराबर है zsh


1
@ अरमान खुशी मदद करने के लिए। इतिहास विस्तार आदेशों की एक पूरी बहुत कुछ है; लिंक उनमें से कुछ को सूचीबद्ध करता है। मैंने जादू की जगह के बारे में कुछ जानकारी संपादित की है जो इनमें से कुछ के उपयोग में मदद कर सकती है।
स्पारहॉक

3
magic-spaceवह एक मीठा विकल्प है!
fduff

1
वहाँ भी histverifyविकल्प है shoptजो इतिहास विस्तार प्रदर्शन करने के लिए रीडलाइन का कारण होगा, लेकिन एंटर कुंजी के पहले प्रेस पर कमांड को निष्पादित नहीं करेगा। जो आपको परिणाम का मूल्यांकन करने और यह तय करने देगा कि क्या आप चलाना चाहते हैं।
इटन रीसनर

2
कभी समझ में नहीं आया क्यों !! CTRL-P की तुलना में बहुत अधिक उपयोग किया जाता है। CTRL-P आपको इसे निष्पादित करने से पहले कमांड को देखने देता है - और आप इसमें संशोधन भी कर सकते हैं। मुझे हमेशा ऐसा लगता है कि मैं पासा पलट रहा हूँ !!
21

1
@abonet एक और उपयोग जो मुझे अभी मिला है, !!वह इसके विस्तार -स्थान का उपयोग कर रहा है । उदाहरण के लिए sudo !!
स्परहॉक

50

अधिकांश शेल जिनमें कमांड लाइन संपादन सुविधा होती है, Emacs कुंजी बाइंडिंग का समर्थन करती है। (एक छोटा उपसमुच्चय)

Up     Ctrl+P
Down   Ctrl+N
Left   Ctrl+B
Right  Ctrl+F
Home   Ctrl+A
End    Ctrl+E
Delete Ctrl+D

वैकल्पिक रूप से, आप set -o viअपने शेल स्टार्टअप फ़ाइल (जैसे, ~/.bashrc) को जोड़कर vi कमांड एडिटिंग मोड का उपयोग करने के लिए अपना शेल सेट कर सकते हैं । फिर, उदाहरण के लिए, आप कर सकते हैं

  • EsckEnter पिछली कमांड (समान !!) को फिर से निष्पादित करने के लिए उपयोग करें । माइनस कुंजी -"चाल अप" कमांड के रूप में भी काम करती है।
  • 12 वीं पिछली कमांड (समान ) का उपयोग EsckkkkkkkkkkkkEnter या Esc12kEnterफिर से निष्पादित करने के लिए !-12
  • का प्रयोग करें Escऔर एक प्रस्ताव आदेश (यानी, k, उपयुक्त रूप से दोहराया), और फिर संपादित बैश कमांड लाइन तुम वहाँ पाते हैं। याद रखें कि आप अभी भी में हो जाएगा, vi, आदेश मोड ताकि आप एक का उपयोग करने की आवश्यकता होगी vi(जैसे संपादन आदेश I, A, C, R, या उनके लोअरकेस समकक्षों में से एक) वास्तव में आदेश को इतिहास से जोड़ने के लिए।
    इसलिए, उदाहरण के लिए, EsckisudoSpaceEnterके बराबर है sudo !!
  • उन्नत उपयोगकर्ताओं के लिए: यदि आप भी कॉपी कर सकते हैं ( y ank) एक पंक्ति और पेस्ट (से पाठ पी ut) यह एक और पर है, तो आप करने के लिए तुलनीय परिणाम पूरा कर सकते हैं !-2:- !$। (दुर्भाग्य से, यह नामांकित बफ़र्स का समर्थन नहीं करता है।)

मैं टर्मिनल के साथ emacs संबंध के बारे में जानता था ... लेकिन viचाल बहुत अच्छी थी !!!
डॉक्स

मुझे deleteसीटीएल + यू के लिए ज़श
टिमो

1
यह रीडलाइन लाइब्रेरी द्वारा कार्यान्वित किया जाता है। इसके प्रलेखन पर आगे के शॉर्टकट मिल सकते हैं।
स्पाइडी

28

मेरा पसंदीदा एक CTRL+ Pतो CTRL+ हैO

यह डिफ़ॉल्ट रूप से काम करता है, कोई अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता नहीं है। ^ P आपको अंतिम कमांड पर जाने देगा और ^ O आपको वर्तमान लाइन निष्पादित करने देगा

ध्यान दें कि CTRL+ Oको जितनी बार चाहें उतनी बार उपयोग किया जा सकता है


2
^ ओ मेरे मैक पर कुछ भी नहीं करता है।
स्नोक्रैश

1
@ सॉनक्रैश ट्राई^J
डेज़ी

अगर मैंने एक lsया pwdपहले किया है तो भी सिर्फ एक खाली लाइन गूँजती है ।
स्नोक्रैश

@Snowcrash इट्स ^ पी तो ^ जे ...
डेज़ी

Ctrl + P HP-UX पर काम नहीं करता है (मुझे नहीं पता कि यह किस शेल का उपयोग कर रहा है)। वर्कअराउंड `ज़श` को लागू करना है।
पीटर मोर्टेंसन

15

ज़रूर! चूँकि आप viकीबाइंडिंग के लिए उपयोग किए जाते हैं , तो उन पर प्रतिक्रिया देने के लिए अपने शेल को कॉन्फ़िगर क्यों न करें? इसके लिए bash, इसे अपने में रखें ~/.inputrc:

set editing-mode vi

बैश के चल रहे उदाहरण फ़ाइल को फिर से नहीं पढ़ेंगे, इसलिए लॉग आउट करें और वापस अंदर जाएं।

zshआपके लिए भी इसका पता लगाएगा: यदि आपकी कोई स्टार्टअप स्क्रिप्ट संपादन मोड को एक तरफ़ा या दूसरे का उपयोग करने के लिए बाध्य नहीं करती है bindkey और यदि आपके $EDITORपर्यावरण चर का पता लगाया जाता है vi, तो यह स्वचालित रूप से viकीबाइंडिंग को सक्षम कर देगा । यदि आपको इसे मजबूर करने की आवश्यकता है, तो इसे अपने में डालें ~/.zshrc:

bindkey -v

इसके बाद, का उपयोग ESCकमांड लाइन प्रवेश करने के लिए और हमेशा की तरह kऔर jनीचे ऊपर ले जाएँ और करने के लिए।

ALSO : अधिकांश गोले में डिफ़ॉल्ट शेल बाइंडिंग ईमैक बाइंडिंग हैं, इसलिए वास्तव में Crtl-Pऔर Ctrl-Nपहले से ही आपके बिना कुछ भी बदलने के लिए काम करना चाहिए।


9

किसी भी POSIX खोल को लागू करने के साथ उपयोगकर्ता पोर्टेबिलिटी विकल्प (शामिल ksh, zsh, bash, yash), आप भी उपयोग कर सकते हैं fcआदेश:

fc -e : -1

एक उदाहरण देखें:

$ echo "hello"
hello

$ fc -e : -1
echo "hello"
hello

इतिहास में अधिक जानकारी जोनाथन लेफ़लर के इतिहास के जवाब से आज्ञाओं की एक श्रृंखला है


6

सभी के लिए आप मैक iterm2 उपयोगकर्ताओं:

आप + Rको बांध सकते हैं 0x0C 0x10 0x0d। यह टर्मिनल को खाली कर देगा और अंतिम कमांड को चलाएगा।

iterm 2 प्रमुख प्राथमिकताएँ


क्या टर्मिनल को साफ़ किए बिना अंतिम कमांड को दोहराने का कोई तरीका है?
ल्यूक डेविस

आह, कोई बात नहीं: किसी को भी इसे पढ़ने के लिए, टर्मिनल को साफ किए बिना दोहराना, उपयोग 0x10 0x0d(यानी छोड़ना 0x0C)।
ल्यूक डेविस

5

मुझे लगता है कि मुझे सुपर उपयोगकर्ता के रूप में अक्सर कमांड को फिर से करने की आवश्यकता है, इसलिए

sudo !!

पिछली कमांड को फिर से करता है जैसे कि मुझे sudoपहली जगह में टाइप करना याद था ।


2
मुझे वास्तव में यह पसंद है, "प्राधिकरण इनकार" के लिए एक अच्छी प्रतिक्रिया की तरह भी दिखता है। "मेरा मतलब था सूडो फ़ॉफ़!"
विक्टर मेलग्रेन

3

kshखोल एक डिफ़ॉल्ट उपनाम है rकि हाल ही में आदेश को दोहराता है। यह बाध्य है fc -s:

alias r='fc -s'

दिलचस्प बात यह bashहै कि fcबिलिन के लिए प्रलेखन ( help fcऔर स्वयं भी मैनुअल में) इसका उल्लेख करते हैं, लेकिन यह उस शेल में एक डिफ़ॉल्ट उपनाम नहीं है:

इसके साथ उपयोग करने के लिए एक उपयोगी उपनाम है r='fc -s', ताकि टाइपिंग r cc अंतिम कमांड के साथ शुरू हो ccऔर टाइपिंग rअंतिम कमांड को फिर से निष्पादित करता है।

इसमें bash, यह तब भी काम करेगा जब आपने इतिहास के विस्तार को बंद कर दिया हो set +H

में zshखोल, वहाँ एक है rbuiltin कि के रूप में ही दर्ज है fc -e -

fcउपयोगिता है एक POSIX मानक उपयोगिता


2

साथ cshया किसी खोल लागू करने cshकी तरह इतिहास प्रतिस्थापन ( tcsh, bash, zsh), आप भी उपयोग कर सकते हैं !<beginning of command>कॉल करने के लिए पिछले आदेश के साथ शुरुआत <beginning of command>

उदाहरण के लिए यदि आप दौड़े

$ tail file.txt
$ less otherfile.txt
$ !ta

!ta निष्पादित करेगा tail file.txt


1

tl; dr !!सिर्फ अपने वर्तमान कमांड के अंतिम कमांड को जोड़ देता है। <backtick>!!<backtick> अंतिम कमांड निष्पादित करता है और आउटपुट को आपके वर्तमान कमांड में जोड़ता है।

वास्तव में 2 संस्करण हैं:

  1. अंतिम आज्ञा स्वयं
  2. अंतिम आदेश का परिणाम

मैं आपको 2 उदाहरण दिखाता हूं:

उदाहरण 1

$ mkdir /test
mkdir: /test: Permission denied

$ sudo !!
sudo mkdir /test
Password:

जैसा कि आप ऊपर देखते हैं, मैं एक कमांड निष्पादित कर रहा हूं और अनिवार्य रूप से सिर्फ अंतिम कमांड को जोड़ रहा हूं।

एक और बदलाव

उदाहरण 2

$ find ~/Documents "test.txt"
/Users/<user>/Documents/test.txt

$ vi `!!`
# Opens test.txt. But if you do
$ vi !!
vi find ~/Documents -name "test.txt"
VIM - Vi IMproved 8.1 (2018 May 18, compiled Oct 29 2018 06:55:58)
Unknown option argument: "-name"
More info with: "vim -h"

के लिए +1 vi `!!`। बहुत उपयोगी है
le_daim

0

जब मैं एक अच्छे xterm एमुलेटर का उपयोग कर रहा हूं, जैसे कि पोटीन, आगे बढ़ने का मेरा पसंदीदा तरीका लाइन फीड सहित कमांड का चयन करना है, इसे क्लिपबोर्ड पर कॉपी करें और फिर इसे पेस्ट करने के लिए माउस पर राइट क्लिक का उपयोग करें। यह एक क्लिक में कमांड को दोहराता है। यह अर्ध-कॉलनों द्वारा अलग किए गए आदेशों के अनुक्रम के लिए भी ठीक काम करता है।


0

आप !nटर्मिनल में nth कमांड निष्पादित करने के लिए उपयोग कर सकते हैं । जहां 'n' historyकमांड की लाइन नं ।


!?अंतिम कमांड का विस्तार किस शेल से होता है? क्या आप सुनिश्चित हैं कि आप इसे नहीं मिला रहे हैं !!(जो पहले से ही अन्य उत्तरों में शामिल हो चुका है)?
एंथोनी जोगेगन

क्षमा करें, वास्तव में मैं उस समय इस कमांड का प्रयोग कर रहा था। कृपया संपादित उत्तर की जाँच करें। @AnthonyGeoghegan
रवि सेवा

यह वह शॉर्टकट था जिसकी मुझे तलाश थी। धन्यवाद!
le_daim

0
  • इतिहास टाइप करें और कमांड के सामने उस नंबर को नोट करें जिसे आप निष्पादित और उपयोग करना चाहते हैं !number

  • आप भी उपयोग कर सकते हैं ! -1 (1 अंतिम कमांड जिसे आप निष्पादित करते हैं, इसे उस गिनती संख्या के साथ बदलें जो आपको मिलती है जब आप अंतिम निष्पादित 1 से नीचे रखते हुए करते हैं)

  • -2 (अंतिम और इतने पर)

0

कई परतें हैं जिनमें आप अंतिम आदेश के लिए पूछ सकते हैं।

लाइन संपादक

लाइन एडिटर (जहां आप अपने कमांड टाइप करते हैं) सीधे ksh द्वारा प्रदान किया जाता है, लाइब्रेरी रीडलाइन द्वारा बैश में और लाइब्रेरी zle द्वारा zsh में। अन्य गोले, जैसे डैश में इस कुंजी को समझने के लिए एक संपादन पुस्तकालय नहीं हो सकता है (जब तक कि --with-libeditसक्षम विकल्प के साथ संकलित नहीं किया जाता है )।

Ksh, bash, zsh में यह काम:

Ctrl- P# Emacs मोड (पिछला)
Ctrl- N# Emacs mode (अगला)
ESC- k # vi मोड ESC कमांड मोड में जाने के लिए और k ऊपर
ESC- j # vi मोड ESC कमांड मोड में जाने के लिए और नीचे j के लिए।

इतिहास

कई गोले द्वारा प्रदान की गई इतिहास प्रणाली कुछ शॉर्टकट के विस्तार की अनुमति देती है:

!!    # bash and zsh, may be provided by `alias \!\!='fc -e -'` in ksh.
!-1   # bash and zsh only

आदेशों

कुछ कमांड हैं जो इतिहास कमांड को पुनः प्राप्त करने में सक्षम हैं।

काफी वर्बोज़ कमांड की तरह (केवल प्रिंट करने के लिए):

history 2 | head -n-1

या अधिक पुराने और इसलिए आमतौर पर अधिक पोर्टेबल fcकमांड (सीधे पुन: निष्पादित):

fc -e - -1

या हो सकता है कि सरल fc -s -1, लेकिन zsh fc के लिए इस तरह के विकल्प को स्वीकार नहीं करता है।

यदि आप केवल कमांड प्रिंट करना चाहते हैं , तो उपयोग करें fc -nl -1 -1:।

संपादित करने के FCEDITलिए, एक टेक्स्ट एडिटर पर सेट करें (उदा।, Ed, emacs, vi, आदि) और सीधे fc का उपयोग करें fc -1:।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.