"&&" 앞과 "&&" 뒤에 명령을 인용할 수 있나요?

"&&" 앞과 "&&" 뒤에 명령을 인용할 수 있나요?

이 질문을 어떻게 표현해야 할지 잘 모르겠지만 기본적으로 vagrant가상 머신을 시작한 다음 다음과 같이 ssh를 실행하는 것과 같은 명령을 실행하는 경우가 많습니다.

vagrant up && vagrant ssh

vagrant함수나 스크립트를 직접 작성하는 것 외에 명령의 두 번째 부분을 "재사용"할 수 있는 방법이 있습니까 ?

답변1

(t)csh, bash또는 zsh역사가 당신을 확장함에 따라할 수 있다쓰다:

vagrant up && !#:0 ssh

하지만 진지하게, 당신은 그렇지 않습니다

답변2

다음을 수행할 수 있습니다.

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

하지만 그렇다고 해서 더 쉬워지는 것은 아닙니다.

언제든지 함수를 만들 수 있습니다.

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

그런 다음:

doall vagrant up ssh

답변3

직접적인 대답은 아니지만 두 가지 대안을 살펴볼 가치가 있습니다(설명하기에는 너무 많습니다).

  1. 별명

    명령을 재사용하는 경우 명령에 별칭을 추가할 수 있습니다.~/.bashrc

    alias vassh="vagrant up && vagrant ssh"
    
  2. 명령줄 기록

    Ctrl+ R이전 명령을 검색할 수 있습니다. 변수를 사용하는 것보다 훨씬 빠릅니다.

답변4

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

이것은 당신이 찾고 있는 것에 가까울 수도 있습니다.

bash다음은 현재 복합 명령의 명령 위치에 있는 첫 번째 단어를 인쇄하는 함수 in입니다 .

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

관련 정보