Com a expansão de histórico (t)csh
, bash
ou zsh
, você poderia escrever:
vagrant up && !#:0 ssh
Mas, sério, você não faria
Não sei com certeza como formular a pergunta, mas, basicamente, muitas vezes me vejo executando um comando como vagrant
para exibir a VM e, em seguida, ssh para ela, como abaixo:
vagrant up && vagrant ssh
Antes de escrever minha própria função ou script, existe uma maneira de "reutilizar" a parte vagrant
na segunda parte do comando?
Você poderia fazer:
eval vagrant\ {'up &&',ssh}
mas isso não tornaria mais fácil.
Você sempre pode fazer uma função
doall() {
cmd=$1; shift
for arg do
"$cmd" "$arg" || return
done
}
E então:
doall vagrant up ssh
Não diretamente uma resposta, mas duas alternativas talvez valem a pena (demais para um comentário):
Alias
Se você usar repetidamente um comando, poderá colocar um alias no seu ~/.bashrc
alias vassh="vagrant up && vagrant ssh"
Histórico da linha de comando
Ctrl + R permite pesquisar seus comandos anteriores. Isso será muito mais rápido do que usar variáveis ...
v=vagrant; $v up && $v ssh
Isso pode estar perto do que você está procurando.
Aqui está uma função que - em bash
- imprimirá a primeira palavra na posição de comando para o comando composto atual:
rc() { $(set -f; unset IFS
set -- $(history 1)
IFS="(){};|'\\"&#"
set \ $2;IFS=\ ;set -- $*
printf %s "$1") "$@"; }
Com isso, você pode fazer:
vagrant up && rc ssh
Um exemplo:
echo up && rc ssh
up
ssh
ou ...
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