이 질문을 어떻게 표현해야 할지 잘 모르겠지만 기본적으로 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
직접적인 대답은 아니지만 두 가지 대안을 살펴볼 가치가 있습니다(설명하기에는 너무 많습니다).
별명
명령을 재사용하는 경우 명령에 별칭을 추가할 수 있습니다.
~/.bashrc
alias vassh="vagrant up && vagrant ssh"
명령줄 기록
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