1

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

# 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 примера - это не то, что я ищу. Я просто хочу выполнить серию команд, которые отличаются только одним аргументом без использования циклов for. Это возможно? Не может быть, но надеюсь, что это ;-).

2 ответа2

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

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

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

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

0

Может быть, вам нужна функция:

function mycat() { cat $1 >> concated_file; }
mycat file1
mycat file2
mycat file3
mycat file4

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .