Procurando por uma maneira, transformar múltiplos comandos com o mesmo parâmetro em um forro

2

Às vezes, acabo fazendo coisas como:

Exemplo :

de ~/blah

$ mkdir ~/test-tmp
$ cp * ~/test-tmp
$ cd ~/test-tmp

usando o diretório de destino 3 vezes seguidas. Não há uma maneira de transformá-los em um comando de uma linha?

    
por fduff 17.07.2014 / 15:49

3 respostas

2

Você quer dizer assim?

mkdir ~/test-tmp && cp * ~/test-tmp && cd ~/test-tmp

ou

function mm() {
  local dir=$1
  if [ ! -z "$dir" ]
  then
    mkdir ~/${dir} && cp * ~/${dir} && cd ~/${dir}
  fi
}
    
por 17.07.2014 / 15:54
2

Se sua preocupação incluir a redigitação de ~/test-tmp , você pode fazer o seguinte para encurtar e combinar os comandos em uma linha única:

D=~/test-tmp; mkdir $D; cp * $D; cd $D

Por favor, note que se o seu caminho inclui espaços, você tem que citar a atribuição e onde você usa a variável:

D="~/test tmp"; mkdir "$D" ; cp * "$D"; cd "$D"
    
por 17.07.2014 / 15:56
2

No bash, o argumento para o último comando que você executou é salvo como !$ . Isso está documentado em man bash :

   !      Start a history substitution, except when followed by  a  blank,
          newline,  carriage return, = or ( (when the extglob shell option
          is enabled using the shopt builtin).
   [...]
   $      The last argument.

Então, você poderia fazer

$ mkdir ~/test-tmp ; cp * !$ ; cd !$

Ou simplesmente

$ mkdir ~/test-tmp
$ cp * !$
$ cd !$
    
por 17.07.2014 / 16:46

Tags