क्या मैं '&&' और 'के बाद' से पहले एक कमांड का संदर्भ दे सकता हूं


10

यह निश्चित नहीं है कि प्रश्न को और कैसे वाक्यांश दिया जाए, लेकिन मूल रूप से, मैं अक्सर खुद को एक कमांड को चलाने के लिए पाता हूं, जैसे vagrantवीएम को ऊपर लाने के लिए, और फिर नीचे की तरह इसमें ssh:

vagrant up && vagrant ssh

अपने स्वयं के फ़ंक्शन या स्क्रिप्ट लिखने का संक्षिप्त तरीका, क्या vagrantकमांड के दूसरे भाग में "पुन: उपयोग" करने का एक तरीका है ?


आपको यह उत्तर संबंधित प्रश्न पर मददगार लग सकता है: unix.stackexchange.com/a/140513/14084
बर्नहार्ड

जवाबों:


23

साथ (t)csh, bashया zshइतिहास विस्तार आप सकता लिखें:

vagrant up && !#:0 ssh

लेकिन, गंभीरता से, आप नहीं करेंगे


यह वही है जो मैं ढूंढ रहा था, लेकिन हाँ। शायद सिर्फ एक उपनाम या कार्य करना आसान है। धन्यवाद!
jktravis

@glenn क्या आप कृपया बता सकते हैं कि क्या !#:0है। यदि हम 0 को 1, 2 या किसी संख्या के साथ प्रतिस्थापित करते हैं, तो इसका क्या अर्थ होगा?
RAM

4
gnu.org/software/bash/manual/bashref.html#History-Interaction - !#उस पंक्ति को संदर्भित करता है जिसे आप वर्तमान में टाइप कर रहे हैं, और :0लाइन में पहला शब्द है ("आवारा")। तो !#:1"ऊपर" होगा, आदि
ग्लेन जैकमैन

4
पवित्र गाय लोग। मेरा जवाब देना बंद करो। A) प्रतिरूप "योनि", या b) को पहले याद रखने के लिए आवश्यक मानसिक प्रयास पर विचार करें! #: 0 "और फिर इसे टाइप करें।
बजे ग्लेन जैकमैन

13

तुम यह कर सकते थे:

eval vagrant\ {'up &&',ssh}

लेकिन यह आसान नहीं होगा।

आप हमेशा फंक्शन कर सकते हैं

doall() {
  cmd=$1; shift
  for arg do
    "$cmd" "$arg" || return
  done
}

और तब:

doall vagrant up ssh

अच्छा तरीका! मुझे एक से अधिक एप्लिकेशन के लिए इसका उपयोग करने में सक्षम होने का विचार पसंद है। धन्यवाद!
jktravis

4

सीधे जवाब नहीं लेकिन, दो विकल्प देखने लायक हैं (एक टिप्पणी के लिए बहुत अधिक):

  1. उपनाम

    यदि आप बार-बार एक कमांड का उपयोग करते हैं, तो आप अपने में एक उपनाम डाल सकते हैं ~/.bashrc

    alias vassh="vagrant up && vagrant ssh"
  2. कमांड लाइन का इतिहास

    Ctrl+ Rचलो आप अपने पिछले आदेशों को खोजते हैं। यह चर का उपयोग करने की तुलना में बहुत तेज होगा ...


4
 v=vagrant; $v up && $v ssh

वह वही हो सकता है जो आप खोज रहे हैं।

यहाँ एक फ़ंक्शन यह है कि - इन bash-कंपाउंड कमांड के लिए कमांड पोजीशन में पहला शब्द प्रिंट करेगा:

rc() { $(set -f; unset IFS
        set -- $(history 1)
        IFS="(){};|'\\\"&#"
        set \ $2;IFS=\ ;set -- $*
        printf %s "$1") "$@"; }

उसके साथ आप कर सकते हैं:

vagrant up && rc ssh

एक उदाहरण:

echo up && rc ssh

आउटपुट

up
ssh

या ...

set -x
(echo);rc 'times two'

आउटपुट

+ echo

+ rc 'times two'
++ set -f
++ unset IFS
+++ history 1
++ set -- 549 '(echo);rc' ''\''times' 'two'\'''
++ IFS='(){};|'\''\"&#'
++ set ' ' echo '' rc
++ IFS=' '
++ set -- echo rc
++ printf %s echo
+ echo 'times two'
times two
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.