Bash
बैश इतिहास प्रतिस्थापन
खोज…
का उपयोग कर! $
कमांड लाइन का उपयोग करते समय पुनरावृत्ति को कम करने के लिए आप !$
का उपयोग कर सकते हैं:
$ echo ping
ping
$ echo !$
ping
आप पुनरावृत्ति पर भी निर्माण कर सकते हैं
$ echo !$ pong
ping pong
$ echo !$, a great game
pong, a great game
ध्यान दें कि पिछले उदाहरण में हमें ping pong, a great game
नहीं मिला ping pong, a great game
क्योंकि पिछली कमांड को दिया गया अंतिम तर्क pong
था, हम उद्धरण जोड़कर इस तरह के मुद्दे से बच सकते हैं। उदाहरण के साथ, हमारा अंतिम तर्क game
था:
$ echo "it is !$ time"
it is game time
$ echo "hooray, !$!"
hooray, it is game time!
त्वरित संदर्भ
इतिहास के साथ बातचीत
# List all previous commands
history
# Clear the history, useful if you entered a password by accident
history -c
इवेंट डिजाइनर्स
# Expands to line n of bash history
!n
# Expands to last command
!!
# Expands to last command starting with "text"
!text
# Expands to last command containing "text"
!?text
# Expands to command n lines ago
!-n
# Expands to last command with first occurrence of "foo" replaced by "bar"
^foo^bar^
# Expands to the current command
!#
शब्द रचनाकार
इन्हें अलग किया जाता है :
वे जिस इवेंट डिज़ाइनर से संदर्भित होते हैं। शब्द डिज़ाइनर संख्या के साथ शुरू नहीं होने पर कोलन को छोड़ा जा सकता है !^
जैसा है वैसा ही !:^
।
# Expands to the first argument of the most recent command
!^
# Expands to the last argument of the most recent command (short for !!:$)
!$
# Expands to the third argument of the most recent command
!:3
# Expands to arguments x through y (inclusive) of the last command
# x and y can be numbers or the anchor characters ^ $
!:x-y
# Expands to all words of the last command except the 0th
# Equivalent to :^-$
!*
संशोधक
ये पूर्ववर्ती घटना या शब्द पदनाम को संशोधित करते हैं।
# Replacement in the expansion using sed syntax
# Allows flags before the s and alternate separators
:s/foo/bar/ #substitutes bar for first occurrence of foo
:gs|foo|bar| #substitutes bar for all foo
# Remove leading path from last argument ("tail")
:t
# Remove trailing path from last argument ("head")
:h
# Remove file extension from last argument
:r
यदि बैश वैरिएबल HISTCONTROL
में या तो ignorespace
या ignoreboth
(या, वैकल्पिक रूप से, HISTIGNORE
में पैटर्न [ ]*
), तो आप अपने कमांड को बैश इतिहास में एक स्थान के साथ प्रीपेन्ड करके स्टोर होने से रोक सकते हैं:
# This command won't be saved in the history
foo
# This command will be saved
bar
पैटर्न द्वारा कमांड इतिहास में खोजें
नियंत्रण r दबाएं और एक पैटर्न टाइप करें।
उदाहरण के लिए, यदि आपने हाल ही में man 5 crontab
निष्पादित किया है, तो आप "क्रॉस्टैब" टाइप करना शुरू कर सकते हैं। प्रॉम्प्ट इस तरह बदलेगा:
(reverse-i-search)`cr': man 5 crontab
`cr'
वहाँ स्ट्रिंग है जिसे मैंने अब तक टाइप किया है। यह एक वृद्धिशील खोज है, इसलिए जैसे ही आप लिखना जारी रखते हैं, खोज परिणाम सबसे हालिया कमांड से मेल खाने के लिए अपडेट हो जाता है जिसमें पैटर्न शामिल होता है।
इसे चलाने से पहले मिलान कमांड को संपादित करने के लिए बाएं या दाएं तीर कुंजी दबाएं, या कमांड चलाने के लिए कुंजी दर्ज करें ।
डिफ़ॉल्ट रूप से खोज पैटर्न से मेल खाते सबसे हाल ही में निष्पादित कमांड को ढूंढती है। इतिहास में वापस जाने के लिए फिर से प्रेस कंट्रोल आर । वांछित आदेश मिलने तक आप इसे बार-बार दबा सकते हैं।
के साथ नव निर्मित निर्देशिका पर स्विच करें! #: N
$ mkdir backup_download_directory && cd !#:1
mkdir backup_download_directory && cd backup_download_directory
यह वर्तमान कमांड के Nth तर्क को प्रतिस्थापित करेगा। उदाहरण में !#:1
को पहले तर्क से बदल दिया जाता है, यानी backup_download_directory।
एक प्रतिस्थापन के साथ पिछले कमांड को दोहराएं
$ mplayer Lecture_video_part1.mkv
$ ^1^2^
mplayer Lecture_video_part2.mkv
यह कमांड पहले से निष्पादित कमांड में 1
को 2
से बदल देगा। यह केवल स्ट्रिंग की पहली घटना को प्रतिस्थापित करेगा और !!:s/1/2/
बराबर है।
यदि आप सभी घटनाओं को बदलना चाहते हैं, तो आपको उपयोग करना होगा !!:gs/1/2/
या !!:as/1/2/
।
पिछले कमांड को सूडो के साथ दोहराएं
$ apt-get install r-base
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
$ sudo !!
sudo apt-get install r-base
[sudo] password for <user>: