'&&' öncesi '&&' komutundan önce bir komuta başvurabilir miyim


10

Soruyu başka nasıl ifade edeceğinden emin değilim, ancak temel olarak, kendimi genellikle vagrantVM'yi getirmek gibi bir komut çalıştırırken buluyorum ve daha sonra aşağıdaki gibi ssh:

vagrant up && vagrant ssh

Kendi fonksiyonumu veya senaryomu yazmaktan yoksun vagrant, komutun ikinci bölümündeki kısmı yeniden kullanmanın bir yolu var mı?


İlgili bir soru için bu yanıtı yararlı bulabilirsiniz: unix.stackexchange.com/a/140513/14084
Bernhard

Yanıtlar:


23

İle (t)csh, bashveya zshgeçmiş genişleme sen verebilir yazın:

vagrant up && !#:0 ssh

Ama cidden, yapmazdın


Aradığım şey bu, ama evet. Bir takma ad veya işlev yapmak muhtemelen daha kolaydır. Teşekkürler!
jktravis

@glenn ne anlama geldiğini açıklar mısınız !#:0? 0'ı 1, 2 veya herhangi bir sayı ile değiştirirsek, bu ne anlama gelir?
RAM

4
gnu.org/software/bash/manual/bashref.html#History-Interaction - !#şu anda yazdığınız satırı ifade eder ve satırdaki :0ilk kelimedir ("vagrant"). Yani !#:1"yukarı", vb
glenn jackman

4
Kutsal inek insanlar. Cevabımı oylamayı bırak. A) "vagrant" ı yeniden yazmak veya b) önce "! #: 0" yı hatırlamak ve daha sonra yazmak için gereken zihinsel çabayı düşünün.
glenn jackman

13

Şunları yapabilirsiniz:

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

ama bu daha kolay olmazdı.

Her zaman bir işlev yapabilirsin

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

Ve sonra:

doall vagrant up ssh

Güzel yaklaşım! Birden fazla uygulama için kullanabilme fikrini seviyorum. Teşekkürler!
jktravis

4

Doğrudan bir cevap değil, iki alternatif göz atmaya değer olabilir (bir yorum için çok fazla):

  1. takma ad

    Tekrar tekrar bir komut kullanırsanız, ~/.bashrc

    alias vassh="vagrant up && vagrant ssh"
  2. Komut satırı geçmişi

    Ctrl+ Rönceki komutlarınızı arayalım. Bu, değişkenleri kullanmaktan çok daha hızlı olacaktır ...


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

Bu aradığınıza yakın olabilir.

bashMevcut bileşik komutun komut satırındaki ilk sözcüğü yazdıracak bir işlev şunlardır:

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

Bununla şunları yapabilirsiniz:

vagrant up && rc ssh

Bir örnek:

echo up && rc ssh

ÇIKTI

up
ssh

veya...

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

ÇIKTI

+ 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.