No Bash, como repito uma série de comandos com uma palavra substituta

1

O que estou procurando é algo que execute uma série de comandos como este:

# cat file1 >> concated_file
# cat file2 >> concated_file
# cat file3 >> concated_file
# cat file4 >> concated_file

Mas não exigiria que eu redigitasse o comando inteiro 3 vezes adicionais. Talvez apenas seja possível substituir o argumento do comando anterior por uma sintaxe como a seguinte:

# cat file1 >> concated_file
# s/file1/file2
# s/file2/file3
# s/file3/file4

Sei que, se o último argumento for o mesmo, você poderá fazer isso:

# cp -p test1.txt test2.txt
# chmod 777 $_
# chown nimmylebby: $_

E você também pode usar loops Bash assim:

# for f in 'file1' 'file2'; 
> do 
> chmod 750 $f;
> done

No entanto, os 2 exemplos acima são não o que estou procurando. Eu só quero executar uma série de comandos que diferem apenas por um argumento sem usando para loops. Isso é possível? Pode não ser, mas esperando que seja; -).

    
por Belmin Fernandez 17.10.2010 / 15:54

2 respostas

3
  • Pressione Para cima , edite o comando conforme necessário, pressione Enter .

  • Como anteriormente, mas providencie a mudança da palavra para que apareça por último no comando para facilitar a edição, por exemplo, cat >> concated_file file1 . Isso é simples com o seu comando de exemplo, não em todos os casos.

  • Defina uma função tomando a parte variável como um argumento: f () { cat "$1" >> concated_file; } . Em seguida, invoque a função várias vezes: f file1 , f file2 ,…

  • Use a expansão do histórico . Aqui você pode fazer ^file1^file2 .

por 17.10.2010 / 17:03
0

Talvez você precise de uma função:

function mycat() { cat $1 >> concated_file; }
mycat file1
mycat file2
mycat file3
mycat file4
    
por 17.10.2010 / 17:07