В Bash, как я повторяю ряд команд с заменой слова

То, что я ищу, является чем-то, что выполнило бы ряд команд как это:

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

Но не потребовал бы, чтобы я перепечатал целую команду 3 дополнительные времена. Возможно, просто смогите заменить аргумент от предыдущей команды с синтаксисом как следующее:

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

Я знаю, что, если последним аргументом является то же, Вы могли бы сделать это:

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

И Вы могли также использовать циклы Bash как так:

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

Однако вышеупомянутые 2 примера не то, что я смотрю. Я просто хочу выполнить ряд команд, которые только отличаются одним аргументом, не используя для циклов. Действительно ли это возможно? Не могло бы всего лишь надеяться, что это ;-).

1
задан 17.10.2010, 17:37

2 ответа

  • Нажмите Up, отредактируйте команду по мере необходимости, нажмите Enter.

  • Как ранее, но принимают меры, чтобы изменяющееся слово было последним в команде для более легкого выпуска, например, cat >> concated_file file1. Это просто с Вашей командой в качестве примера, не так во всех случаях.

  • Определите функцию, принимающую переменное участие как аргумент: f () { cat "$1" >> concated_file; }. Затем вызывайте функцию несколько раз: f file1, f file2, …

  • Используйте расширение истории. Здесь можно сделать ^file1^file2.

3
ответ дан 12.12.2019, 10:39

Возможно, то, в чем Вы нуждаетесь, является функцией:

function mycat() { cat $1 >> concated_file; }
mycat file1
mycat file2
mycat file3
mycat file4
0
ответ дан 12.12.2019, 10:39

Теги

Похожие вопросы