बैश में निष्पादित किए बिना इतिहास में कमांड सहेजें


8

क्या इतिहास को बिना क्रियान्वित किए बैश इतिहास में बचाने का कोई तरीका है? जैसे

$ cmd [a long list of arguments] 

और अब टाइपिंग के दौरान मुझे याद है कि मैं पहले कुछ और करना चाहता हूं। क्या मुझे ऐसा कुछ हो सकता है

$ cmd [a long list of arguments][some-key-strokes]

और यह वास्तव में निष्पादित नहीं करता है, लेकिन बैश इतिहास में चला जाता है ताकि मैं इसे बाद में उपयोग कर सकूं?


5
उस स्थिति में, मैं बस के साथ लाइन को उपसर्ग करता हूं #, और फिर Enter दबाएं।
ओलिवर चार्ल्सवर्थ

जवाबों:


5

एक बेहतर तरीका हो सकता है, लेकिन आप :pनिष्पादन के बिना वर्तमान टिप्पणी लाइन को प्रिंट करने के लिए इतिहास विस्तार के संशोधक का उपयोग कर सकते हैं । !#वर्तमान लाइन है, और %अपने आप से कुछ भी नहीं मैच होगा

$ cmd [arguments] !#%:p

ठंडा! ;) और कमांड में विशेष वर्ण से बचने की आवश्यकता के बिना क्या गड़बड़ हो सकती है अगर कमांड सिर्फ ls -al+1 नहीं है

ठंडा! बहुत साफ

8

कमांड के -sविकल्प का उपयोग करें history:

history -s cmd arg1 arg2

history -sसुविधापूर्वक, स्वयं को कॉल को कमांड इतिहास में नहीं जोड़ा जाता है, इसलिए आपके इतिहास में ऐसा प्रतीत होता है मानो आपने cmdवास्तव में ऐसा किए बिना निष्पादित किया हो।


ठंडा! यह भी जबरदस्त है

1

आमतौर पर यह द्वारा किया जाता है

echo 'cmd [a long list of arguments]' >> /home/you/bash_history

ध्यान दें कि इतिहास का नाम आपके सिस्टम पर भिन्न हो सकता है। इसलिए आप HISTFILEपर्यावरण संस्करण का उपयोग कर सकते हैं

क्या बनाता है:

echo 'cmd [a long list of arguments]' >> "$HISTFILE"

1

आम तौर पर मैं लाइन को एक टिप्पणी में बदलने के लिए लाइन की शुरुआत में # जोड़ देता हूं:

#cmd [a long list of arguments] 

मैं इस तरह से पसंद करता हूं क्योंकि आप इसे सिर्फ 3 [4 के साथ कर सकते हैं यदि आपको #] कीस्ट्रोक डालने के लिए SHIFT की आवश्यकता है

^a#<ENTER>

^ करंट लाइन की शुरुआत में जाता है

# टिप्पणी जोड़ता है

ENTER टिप्पणी निष्पादित करता है



0

आप एक स्थान और जोड़ने का प्रयास कर सकते हैं | (पाइप) लाइन के अंत में, हिट दर्ज करें, और फिर Ctrl-C'ing।

( Space, |, Enter, Ctrl+ C)

कमांड आपके इतिहास में होगी a | शुरुआत में # के बजाय अंत में (बैकस्पेस के साथ हटा सकते हैं) (संभवतः निकालने के लिए अधिक थकाऊ)।

अस्वीकरण: मुझे नहीं पता कि यह हमेशा काम करता है! अपने जोखिम पार इस्तेमाल करें!

$ cmd [लंबी तर्क सूची] |

> Ctrl+C

$ Up

$ cmd [लंबी तर्क सूची] |


0

आप इस पंक्ति का उपयोग करके देख सकते हैं:

history -s -p $COMMAND

से help:

The -p option means to perform
history expansion on each ARG and display the result,

इसका मतलब है कि आप !!इतिहास के निचले भाग में परिणाम जैसी चीज़ों का विस्तार और भंडारण कर सकते हैं ।


history -sदो साल पहले एक जवाब में दिया गया था। क्या उस -pपर सुधार होता है? क्या करता -pहै? (इस हद तक कि ऐसा करने का कोई मतलब नहीं है, आपको इसे बेहतर बनाने के लिए अपने उत्तर को संपादित करना चाहिए , और मेरी टिप्पणी का दूसरी टिप्पणी के साथ जवाब नहीं देना चाहिए।)
G-Man Says 'Reinstate Monica'

0

एक अन्य विकल्प लाइन की शुरुआत में जाना है और उस चीज़ को करना है जिसे आप && द्वारा पसंद करने जा रहे हैं, जैसे

rm old_file && cmd [args]

इसलिए यदि आप जिस चीज को सफल करना चाहते हैं, तो आपका कमांड तुरंत बाद में चलेगा, और यदि यह विफल रहता है तो आप कमांड नहीं चलाएंगे, लेकिन यह इतिहास में होगा। आप भी कर सकते हैं

test && cmd [args]

चूंकि बिना किसी आर्गन के परीक्षण विफल हो जाएगा, लेकिन यह #विधि की तुलना में मुट्ठी भर अतिरिक्त कीस्ट्रोक्स है ।


0

मुझे लगता है कि "कुछ प्रमुख स्ट्रोक" आप चाहते हैं कि Ctrl-U और Ctr-Y हैं जो किल-रिंग में एक पंक्ति को स्टोर करते हैं, और फिर इसे बाद में वापस बाहर कर देते हैं। यह इतिहास में नहीं जाता है, लेकिन मुझे लगता है कि यह नहीं करना चाहिए, जैसा कि आपने ऐसा नहीं किया।

रीडिंग किलिंग कमांड्स

मारना और हाँकना

मैंने इस साल पहले सीखा था, फिर भूल गया और उन महत्वपूर्ण स्ट्रोक की तलाश में चला गया।

यहाँ भी इसकी चर्चा की गई है: /unix/140741/how-to-save-a-command-you-entered-without-executing-it

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