Combinando a expansão da chave e o redirecionamento de saída

7

Frequentemente, uso expansão de parâmetro na linha de comando, como

cp a.{ext1,ext2}

que é expandido para

cp a.ext1 a.ext2

No entanto, em muitos casos, não uso cp , mas outra ferramenta, vamos chamá-lo de cat , e eu faria algum redirecionamento de saída, como

cat a.ext1 > a.ext2

No meu caso a pode variar, ou ser bastante longo, então eu gostaria de poder usar algum tipo de expansão de chaves, que pelo menos precisa apenas de uma ocorrência de a no one-liner. Como posso obter isso?

Estou usando especificamente

$ bash --version
GNU bash, version 3.2.51(1)

mas respostas usando outros shells também são bem-vindas.

    
por Bernhard 03.07.2014 / 09:25

3 respostas

11

Você pode digitar:

$ cat very-long-filename.ext1Ctrl+WCtrl+Y>Ctrl+YBackspace2

Ou:

$ cat very-long-filename.Ctrl+WCtrl+Yext1>Ctrl+Yext2

Para realmente usar a expansão de chaves, observe que:

cat a.ext1 > a.ext2

Também pode ser escrito:

cat > a.ext2 a.ext1

No entanto, você não pode fazer:

cat > a.ext{2,1}

No entanto, você pode fazer:

eval cat \> a.ext{2,1}
    
por 03.07.2014 / 10:44
2

E sobre: -

f=really-long-filename; cat "$f.ext1" > "$f.ext2"
    
por 03.07.2014 / 09:57
1

Use uma função de shell

 xyx () { cat "$1".$2 > "$1".$3; }

então

xyz fie foo fum

expande para

cat fee.foo > fee.fum
    
por 03.07.2014 / 13:35