'&&'다음에 '&&'앞에있는 명령을 참조 할 수 있습니까


10

질문을 표현하는 다른 방법을 모르지만 기본적으로 vagrantVM을 불러 와 같은 명령을 실행 한 다음 아래처럼 ssh로 옮깁니다.

vagrant up && vagrant ssh

내 자신의 함수 나 스크립트를 작성하지 못한 vagrant경우 명령의 두 번째 부분에서 "재사용"할 수있는 방법이 있습니까?


관련 질문에 대한 답변이 도움이 될 것입니다 : unix.stackexchange.com/a/140513/14084
Bernhard

답변:


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) "vagrant"를 다시 입력하거나 b) 먼저 "! # : 0"을 기억 한 다음 입력하는 데 필요한 정신적 노력을 고려하십시오.
glenn jackman

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.