Posso referenciar um comando antes de '&&' depois de '&&'

10

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?

    
por jktravis 07.09.2014 / 20:37

4 respostas

23

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

    
por 08.09.2014 / 00:13
13

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
    
por 07.09.2014 / 21:44
4

Não diretamente uma resposta, mas duas alternativas talvez valem a pena (demais para um comentário):

  1. Alias

    Se você usar repetidamente um comando, poderá colocar um alias no seu ~/.bashrc

    alias vassh="vagrant up && vagrant ssh"
    
  2. Histórico da linha de comando

    Ctrl + R permite pesquisar seus comandos anteriores. Isso será muito mais rápido do que usar variáveis ...

por 07.09.2014 / 20:52
4
 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

OUTPUT

up
ssh

ou ...

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

OUTPUT

+ 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
    
por 08.09.2014 / 00:53

Tags